Création d'une expression de requête
Les expressions de requête permettent de sélectionner dans ArcGIS un sous-ensemble d'entités et des enregistrements de table. Les expressions de requête dans ArcGIS respectent les expressions SQL standard. Par exemple, vous utilisez cette syntaxe par le biais de l'outil Sélectionner selon les attributs ou de la boîte de dialogue Générateur de requêtes pour définir un ensemble de définition de couche.
Cette rubrique indique comment créer des expressions de clause WHERE ; elle est utile si vous commencez à utiliser SQL. Pour une référence plus détaillée, reportez-vous à la rubrique Référence SQL pour les expressions de requête utilisées dans ArcGIS.
Expression SQL simple
La première partie SELECT * FROM de l'expression SQL vous est déjà automatiquement fournie.
Les expressions de requête utilisent la forme générale qui suit une clause Select * From <couche ou jeu de données> Where (par exemple, la partie de l'expression SQL qui suit SELECT * FROM <nom_de_la_couche> WHERE).
Voici la forme générale des expressions de requête ArcGIS :
<nom_du_champ> <opérateur> <valeur ou chaîne>
Pour les requêtes composées, la forme suivante est utilisée :
<nom_du_champ> <opérateur> <valeur ou chaîne> <connecteur> <nom_du_champ> <opérateur> <valeur ou chaîne> ...
Vous pouvez utiliser des parenthèses () pour définir l'ordre des opérations dans les requêtes composées.
Etant donné que vous sélectionnez les colonnes dans leur totalité, vous ne pouvez pas restreindre la fonction SELECT pour renvoyer uniquement certaines colonnes de la table correspondante, la syntaxe SELECT * est précodée. Pour cette raison, les mots-clés tels que DISTINCT, ORDER BY et GROUP BY ne peut pas être utilisés dans une requête SQL dans ArcGIS, sauf dans le cas de sous-requêtes. Reportez-vous à la rubrique Référence SQL pour les expressions de requête utilisées dans ArcGIS pour plus d'informations sur les sous-requêtes.
Dans la plupart des boîtes de dialogue ArcGIS où vous créez une expression de requête, le nom de la couche ou de la table est fourni (ou vous le sélectionnez dans une liste déroulante). Par exemple :
La partie suivante de l'expression est la clause WHERE qui est la partie que vous devez créer. Voici un exemple de clause WHERE SQL simple :
STATE_NAME = 'Alabama'
Cette clause sélectionne les entités contenant "Alabama" dans un champ appelé STATE_NAME.
syntaxe SQL
La syntaxe SQL que vous utilisez varie selon la source de données. Chaque SGBD possède son propre dialecte SQL.
Pour interroger des données basées sur des fichiers, y compris les géodatabases fichier, les couvertures, les fichiers de formes, les tables INFO, ainsi que les données DAO et VPF, utilisez le dialecte SQL ArcGIS qui gère un sous-ensemble de fonctionnalités SQL. Pour interroger des géodatabases personnelles, utilisez la syntaxe Microsoft Access. Pour interroger une géodatabase ArcSDE, vous devez utiliser la syntaxe SQL du SGBD (à savoir Oracle, SQL Server, DB2, Informix ou PostgreSQL).
Les boîtes de dialogue ArcGIS dans lesquelles vous créez les clauses SQL WHERE vous aident à utiliser la syntaxe correcte pour la base de données que vous interrogez. Elles répertorient les noms de champs et les valeurs corrects, accompagnés des séparateurs appropriés. De plus, elles sélectionnent automatiquement les mots-clés et les opérateurs SQL pertinents.
Recherche de chaînes
Les chaînes doivent toujours être placées entre guillemets simples. Par exemple :
STATE_NAME = 'California'
Les chaînes d'expressions respectent la casse, sauf si vous interrogez des classes d'entités et des tables d'une géodatabase personnelle. Pour effectuer une recherche sans distinguer les majuscules et les minuscules dans d'autres formats de données, vous pouvez utiliser une fonction SQL permettant d'appliquer la même casse à toutes les valeurs. Pour les sources de données fichier, tels que les géodatabases fichier ou les fichiers de formes, utilisez la fonction UPPER ou LOWER.
L'expression suivante, par exemple, permet de sélectionner les clients dont le nom est enregistré sous Jones ou JONES :
UPPER(LAST_NAME) = 'JONES'
Des fonctions similaires sont associées aux autres sources de données. Pour les géodatabases personnelles, par exemple, il est possible d'utiliser les fonctions UCASE et LCASE pour effectuer la même opération.
Pour effectuer une recherche à l'aide d'une chaîne partielle, utilisez l'opérateur LIKE (au lieu de l'opérateur =). L'expression suivante, par exemple, permet de sélectionner Mississippi et Missouri dans les noms d'états américains :
STATE_NAME LIKE 'Miss%'
% signifie qu'il peut être remplacé par tout : un caractère, cent caractères ou aucun caractère. Par contre, pour effectuer une recherche avec un caractère générique représentant un seul caractère, utilisez _.
Par exemple, l'expression ci-dessous fournit les résultats Catherine Smith et Katherine Smith :
OWNER_NAME LIKE '_atherine smith'
Les caractères génériques ci-dessus fonctionnent pour toutes les données de fichiers ou les géodatabases ArcSDE. Le caractère générique utilisé pour interroger les géodatabases personnelles est * pour tout nombre de caractères et ?
Les caractères génériques apparaissent sous la forme de boutons dans les boîtes de dialogue Sélectionner selon les attributs et Générateur de requêtes. Vous pouvez cliquer sur le bouton pour entrer le caractère générique correspondant dans l'expression que vous créez. Seuls les caractères génériques compatibles avec la source de données de la couche ou de la table sur laquelle vous effectuez une requête sont affichés.
Si vous utilisez un caractère générique dans une chaîne avec l'opérateur =, ce caractère est traité comme faisant partie de la chaîne et perd sa valeur de caractère générique.
Vous pouvez utiliser les opérateurs supérieur à (>), inférieur à (<), supérieur ou égal à (>=), inférieur ou égal à (<=) et BETWEEN (entre) pour sélectionner les valeurs de chaîne en fonction de l'ordre de tri. Voici par exemple une expression qui permet de sélectionner toutes les villes d'une couverture dont le nom commence par les lettres M à Z :
CITY_NAME >= 'M'
L'opérateur différent de (<>) peut également être utilisé pour les requêtes dans les chaînes.
Si la chaîne contient un guillemet simple, vous devez d'abord utiliser un autre guillemet simple comme caractère d'échappement. Par exemple :
NAME = 'Alfie''s Trough'
Mot-clé NULL
Vous pouvez utiliser le mot-clé NULL afin de sélectionner les entités et les enregistrements comportant des valeurs nulles pour le champ spécifié. Le mot-clé NULL est toujours précédé de IS ou IS NOT.
Par exemple, pour rechercher les villes dont la population en 1996 n'a pas été spécifiée, vous pouvez utiliser la requête
POPULATION96 IS NULL
Par contre, pour rechercher les villes dont la population en 1996 a été spécifiée, vous pouvez utiliser la requête
POPULATION96 IS NOT NULL
Recherche de chiffres
Vous pouvez effectuer des requêtes sur des nombres à l'aide des opérateurs égal à (=), différent de (<>), supérieur à (>), inférieur à (<), supérieur ou égal à (>=) , inférieur ou égal à (<=) et BETWEEN.
Par exemple
POPULATION96 >= 5000
Les valeurs numériques apparaissent toujours avec un point comme séparateur décimal, quels que soient vos paramètres régionaux. La virgule ne peut pas être utilisée comme séparateur décimal ni séparateur des milliers dans une expression.
Calculs
Vous pouvez inclure des calculs dans les expressions à l'aide des opérateurs arithmétiques +, -, * et /.
Les calculs peuvent être effectués entre des champs et des nombres.
Par exemple :
AREA >= PERIMETER * 100
Les calculs peuvent également être effectués entre différents champs.
Ainsi, pour rechercher les départements ayant une densité de population inférieure ou égale à 25 habitants par kilomètre carré, vous pouvez utiliser l'expression suivante :
POP1990 / AREA <= 25
Précédence des opérateurs
Les expressions sont évaluées selon des règles standard de précédence des opérateurs. Par exemple, la partie d'une expression placée entre parenthèses est évaluée avant la partie en dehors des parenthèses.
L'exemple suivant :
HOUSEHOLDS > MALES * POP90_SQMI + AREA
est évalué différemment de :
HOUSEHOLDS > MALES * (POP90_SQMI + AREA)
Vous pouvez soit cliquer pour ajouter des parenthèses et saisir l'expression que vous voulez y faire figurer, soit mettre en surbrillance l'expression existante et cliquer sur le bouton Parenthèses pour ajouter des parenthèses.
Combinaison des expressions
Des expressions complexes peuvent être créées en combinant des expressions à l'aide des opérateurs AND et OR.
Par exemple, pour sélectionner tous les bâtiments d'habitation occupant une surface supérieure à 1 500 pieds carrés avec un garage pouvant contenir trois voitures ou plus, utilisez l'expression suivante :
AREA > 1500 AND GARAGE > 3
Lorsque vous utilisez l'opérateur OR, au moins un côté de l'expression sur les deux côtés séparés par cet opérateur doit être vrai pour que l'enregistrement puisse être sélectionné.
Par exemple :
RAINFALL < 20 OR SLOPE > 35
Utilisez l'opérateur NOT au début d'une expression pour rechercher les entités ou les enregistrements qui ne correspondent pas à l'expression spécifiée.
Par exemple :
NOT STATE_NAME = 'Colorado'
Les expressions comportant l'opérateur NOT peuvent également combiner les opérateurs AND et OR.
L'expression suivante, par exemple, permet de sélectionner tous les états de Nouvelle-Angleterre à l'exception du Maine :
SUB_REGION = 'New England' AND NOT STATE_NAME = 'Maine'
Sous-requêtes
Une sous-requête est une requête imbriquée dans une autre requête. Les sous-requêtes sont prises en charge uniquement par les sources de données de géodatabase. Elle peut être utilisée pour appliquer un prédicat ou des fonctions d'agrégation, ou pour comparer des données avec des valeurs stockées dans une autre table. Par exemple, cette requête permet de sélectionner uniquement les pays qui ne sont pas répertoriés dans la table indep_countries :
COUNTRY_NAME NOT IN (SELECT COUNTRY_NAME FROM indep_countries)
Pour plus d'informations, reportez-vous à la rubrique Référence SQL pour les expressions de requête utilisées dans ArcGIS.
Requêtes sur des dates
Les boîtes de dialogue ArcGIS dans lesquelles vous créez les clauses SQL WHERE vous aident à utiliser la syntaxe de données correcte pour la base de données que vous interrogez. La plupart du temps, il vous suffit de cliquer sur le champ, sur l'opérateur, puis sur la valeur pour générer la syntaxe correcte.