Utilisation de SQL pour la création de rapports et d'analyses sur des géodatabases fichier
La géodatabase fichier permet d'effectuer des analyses et des rapports approfondis grâce à l'utilisation d'expressions et d'alias via la méthode SubFields (liste des champs) d'une jointure QueryDef. De plus, les mots-clés ORDER BY et GROUP BY sont pris en charge via la clause PostFixClause. Pour le mot-clé GROUP BY, les expressions incluent des fonctions d'agrégation telles que MIN, MAX et SUM.
ALIAS
Attribue un autre nom à une colonne, afin d'obtenir une sortie plus lisible.
SQL
SELECT NAME, POP1997 - POP1990 as PopChange
FROM counties ORDER BY NAME
ArcObjects
pQueryDef.SubFields = "NAME, POP1997 - POP1990 as PopChange"
pQueryDef.Tables = "counties"
pQueryDef.PostfixClause = "ORDER BY NAME"
CASE
Evalue une liste de conditions et renvoie une expression parmi plusieurs expressions résultantes.
SQL
SELECT name,salary,
CASE
WHEN salary <= 2000 THEN 'low'
WHEN salary > 2000 AND salary <= 3000 THEN 'average'
WHEN salary > 3000 THEN 'high'
END AS salary_level
FROM employees
ORDER BY salary ASC
ArcObjects
pQueryDef.SubFields = "name,salary,
CASE
WHEN salary <= 2000 THEN 'low'
WHEN salary > 2000 AND salary <= 3000 THEN 'average'
WHEN salary > 3000 THEN 'high'
END AS salary_level"
pQueryDef.Tables = " employees"
pQueryDef.PostfixClause = " ORDER BY salary ASC "
COALESCE
Renvoie la première valeur de champ non Null parmi ses arguments.
SQL
SELECT Name, COALESCE(Business_Phone, Cell_Phone, Home_Phone)
Contact_Phone
FROM Contact_Info
ArcObjects
queryDef.SubFields = "Name, COALESCE(Business_Phone, Cell_Phone,
Home_Phone) Contact_Phone"
queryDef.Tables = "Contact_Info"
Contact_Info :
Nom |
Business_Phone |
Cell_Phone |
Home_Phone |
Jeff |
531-2531 |
622-7813 |
565-9901 |
Laura |
NULL |
772-5588 |
312-4088 |
Peter |
NULL |
NULL |
594-7477 |
Résultat :
Nom |
Contact_Phone |
Jeff |
531-2531 |
Laura |
772-5588 |
Peter |
594-7477 |
EXPRESSIONS
SQL
SELECT SIN(sunangle)
FROM sightings
ArcObjects
queryDef.SubFields = "SIN(sunangle)"
queryDef.Tables = "sightings"
FONCTIONS SET
Opérateur | Description |
AVG |
Calcule la moyenne de toutes les valeurs du groupe. Les valeurs Null sont ignorées. |
COUNT(*), COUNT(expression) |
COUNT(*) renvoie le nombre d'enregistrements contenus dans une table. Les valeurs Null sont incluses. COUNT(expression) renvoie le nombre de valeurs dans l'expression spécifiée. Les valeurs Null sont ignorées. |
MAX |
Recherche les valeurs maximum du groupe. Les valeurs Null sont ignorées. |
MIN |
Recherche la valeur minimum du groupe. Les valeurs Null sont ignorées. |
STDDEV, STDDEV_SAMP |
Renvoie l'écart type de l'échantillon de l'expression. |
STDDEV_POP |
Renvoie l'écart type de la population de l'expression. |
SUM |
Recherche les valeurs contenues dans le groupe. Les valeurs Null sont ignorées. |
VAR, VAR_SAMP |
Renvoie la variance de l'échantillon de l'expression. |
VAR_POP |
Renvoie la variance de la population de l'expression. |
OPERATEURS ARITHMETIQUES
Vous utilisez un opérateur arithmétique pour additionner, soustraire, multiplier et diviser des valeurs numériques.
Opérateur | Description |
* |
Opérateur arithmétique pour la multiplication |
/ |
Opérateur arithmétique pour la division |
+ |
Opérateur arithmétique pour l'addition |
- |
Opérateur arithmétique pour la soustraction |
FONCTIONS
Vous trouverez ci-après la liste complète des fonctions prises en charge par les géodatabases fichier.
Fonctions de date
Fonction | Description |
CURRENT_DATE |
Renvoie la date actuelle. |
EXTRACT (extract_field FROM extract_source) |
Renvoie la partie extract_field de l'argument extract_source. L'argument extract_source désigne une expression de date-heure. L'argument extract_field peut correspondre à l'un des mots-clés suivants: ANNEE, MOIS, JOUR, HEURE, MINUTE ou SECONDE. |
CURRENT_TIME |
Renvoie l'heure actuelle. |
CURRENT_TIMESTAMP |
Renvoie l'heure et la date actuelles. |
Fonctions de chaîne
Les arguments signalés par string_exp peuvent représenter le nom d'une colonne, un littéral de chaîne de caractères ou le résultat d'une autre fonction scalaire dans lequel le type de données sous-jacent peut être représenté par un type de caractère.
Les arguments signalés par character_exp représentent des chaînes de caractères à longueur variable.
Les arguments signalés par start ou length peuvent représenter un littéral numérique ou le résultat d'une autre fonction scalaire dans lequel le type de données sous-jacent peut être représenté par un type numérique.
Ces fonctions de chaîne sont de base 1, c'est-à-dire que le premier caractère de la chaîne représente la valeur 1.
Fonction | Description |
CHAR_LENGTH (string_exp) |
Renvoie la longueur en caractères de l'expression de chaîne. |
CONCAT (string_exp1, string_exp2) |
Renvoie une chaîne de caractères comme résultat de la concaténation de string_exp2 vers string_exp1. |
LOWER (string_exp) |
Renvoie une chaîne égale à string_exp en convertissant toutes les majuscules en minuscules. |
POSITION (character_exp IN character_exp) |
Renvoie la position de la première expression de caractères dans la seconde expression de caractères. Le résultat se présente sous la forme d'une valeur numérique exacte avec une précision définie au niveau de l'implémentation et une échelle de zéro. |
SUBSTRING (string_exp FROM start FOR length) |
Renvoie une chaîne de caractères dérivée de string_exp, commençant à la position spécifiée par start pour les caractères length. |
TRIM(BOTH | LEADING | TRAILINGtrim_characterFROM string_exp) |
Renvoie l'argument string_exp avec trim_character supprimés du début, de la fin ou des deux extrémités de la chaîne. |
UPPER (string_exp) |
Renvoie une chaîne égale à string_exp en convertissant toutes les minuscules en majuscules. |
Fonctions numériques
Toutes les fonctions numériques renvoient une valeur numérique.
Les arguments signalés par numeric_exp, float_exp ou integer_exp peuvent représenter le nom d'une colonne, le résultat d'une autre fonction scalaire, ou un littéral numérique dans lequel le type de données sous-jacent peut représenter un type numérique.
Fonction | Description |
ABS (numeric_exp) |
Renvoie la valeur absolue de numeric_exp. |
ACOS (float_exp) |
Renvoie l'arcosinus de float_exp sous forme d'un angle exprimé en radians. |
ASIN (float_exp) |
Renvoie l'arcsine de float_exp sous forme d'un angle exprimé en radians. |
ATAN (float_exp) |
Renvoie l'arctangente de float_exp sous forme d'un angle exprimé en radians. |
CEILING (numeric_exp) |
Renvoie le plus petit nombre entier supérieur ou égal à numeric_exp. |
COS (float_exp) |
Renvoie le cosinus de float_exp où float_expreprésente un angle exprimé en radians. |
FLOOR (numeric_exp) |
Renvoie le plus grand nombre entier inférieur ou égal à numeric_exp. |
LOG (float_exp) |
Renvoie le logarithme naturel de float_exp. |
LOG10 (float_exp) |
Renvoie le logarithme de base 10 de float_exp. |
MOD (integer_exp1, integer_exp2) |
Renvoie le reste de la division de integer_exp1 par integer_exp2. |
POWER (numeric_exp, integer_exp) |
Renvoie la valeur de numeric_exp à la puissance de integer_exp. |
ROUND (numeric_exp, integer_exp) |
Renvoie numeric_exp arrondi à la valeur integer_exp à droite de la virgule. Si integer_exp est négatif, numeric_exp est arrondi à |integer_exp| à gauche de la virgule. |
SIGN (numeric_exp) |
Renvoie un indicateur du signe de numeric_exp. Si numeric_exp est inférieur à zéro, la valeur -1 est renvoyée. Si numeric_exp est égal à zéro, la valeur 0 est renvoyée. Si numeric_exp est supérieur à zéro, la valeur 1 est renvoyée. |
SIN (float_exp) |
Renvoie le sinus de float_exp où float_exp représente un angle exprimé en radians. |
TAN (float_exp) |
Renvoie la tangente de float_exp où float_exp représente un angle exprimé en radians. |
TRUNCATE (numeric_exp, integer_exp) |
Renvoie numeric_exp tronqué à integer_exp positions à droite de la virgule. Si integer_exp est négatif, numeric_exp est tronqué à |integer_exp| à gauche de la virgule. |
GROUP BY
Permet de collecter des données sur plusieurs enregistrements et de grouper les résultats en fonction d'une ou de plusieurs colonnes
SQL
SELECT STATE_NAME, SUM(POP1990) as TotalPopulation
FROM counties
GROUP BY STATE_NAME ORDER BY STATE_NAME
ArcObjects
pQueryDef.SubFields = "STATE_NAME, SUM(POP1990) as
TotalPopulation"
pQueryDef.Tables = "counties"
pQueryDef.PostfixClause = "GROUP BY STATE_NAME ORDER BY
STATE_NAME"
HAVING
Clause WHERE sur un argument GROUP BY.
SQL
SELECT department, MAX(salary) as Highest_salary
FROM employees
GROUP BY department HAVING MAX(salary) < 50000
ArcObjects
queryDef.SubFields = "department, MAX(salary) as Highest_salary"
queryDef.Tables = "employees"
pQueryDef.PostfixClause = "GROUP BY department HAVING MAX(salary)
< 50000"
JOINS
Associe les enregistrements de deux ou plusieurs tables.
Cross Join
SQL
SELECT Table1.name, Table1.Address, Table2.name, Table2.Salary
FROM Table1 CROSS JOIN Table2
ArcObjects
queryDef.SubFields = "Table1.name, Table1.Address, Table2.name,
Table2.Salary"
queryDef.Tables = "Table1 CROSS JOIN Table2"
Inner Join
SQL
SELECT Table1.C1, Table1.C2, Table2.C3, Table2.C4 FROM Table1
INNER JOIN Table2 ON Table1.C1 = Table2.C3
ArcObjects
queryDef.SubFields = "Table1.C1, Table1.C2, Table2.C3,
Table2.C4"
queryDef.Tables = "Table1 INNER JOIN Table2 ON Table1.C1 =
Table2.C3"
Left Outer Join
SQL
SELECT Table1.C1, Table1.C2, Table2.C3, Table2.C4 FROM Table1
LEFT OUTER JOIN Table2 ON Table1.C1 = Table2.C3
ArcObjects
queryDef.SubFields = "Table1.C1, Table1.C2, Table2.C3,
Table2.C4"
queryDef.Tables = "Table1 LEFT OUTER JOIN Table2 ON Table1.C1 =
Table2.C3"
Right Outer Join
SQL
SELECT * FROM Table1 RIGHT OUTER JOIN Table2 ON Table1.C1 =
Table2.C3
ArcObjects
queryDef.SubFields = "*"
queryDef.Tables = "Table1 RIGHT OUTER JOIN Table2 ON Table1.C1 =
Table2.C3"
NULLIF
NULLIF renvoie la valeur NULL si les deux paramètres fournis sont égaux ; dans le cas contraire, la valeur du premier paramètre est renvoyée.
SQL
SELECT Location, NULLIF(Sales, Forecast) as Results FROM
StoreSales
ArcObjects
queryDef.SubFields = " Location, NULLIF(Sales, Forecast) as
Results"
queryDef.Tables = "StoreSales"
StoreSales :
Emplacement | Sales | Forecast |
Redlands |
39000 |
55000 |
Palm Springs |
60000 |
61000 |
Riverside |
40000 |
40000 |
Résultat :
Emplacement | Résultats |
Redlands |
39000 |
Palm Springs |
60000 |
Riverside |
NULL |
ORDER BY
Spécifie l'ordre de tri. L'ordre peut être croissant (ASC) ou décroissant (DESC) et les champs peuvent être regroupés. Les types de regroupement possibles sont BINARY(BIN), CASESENSITIVE(CASE) et NOCASESENSITIVE(NOCASE). Le regroupement de type Binary est à la fois sensible à la casse et aux accents. Le regroupement de type Casesensitive fait la distinction entre les majuscules et les minuscules. Le regroupement de type Nocasesensitive ne fait pas la distinction entre les majuscules et les minuscules.
SQL
SELECT STATE_NAME, POP1990
FROM counties ORDER BY STATE_NAME
ArcObjects
pQueryDef.SubFields = "STATE_NAME, POP1990"
pQueryDef.Tables = "counties"
pQueryDef.PostfixClause = "ORDER BY STATE_NAME"
SQL
SELECT STATE_NAME, POP1990
FROM counties ORDER BY STATE_NAME COLLATE BINARY ASC
ArcObjects
pQueryDef.SubFields = "STATE_NAME, POP1990"
pQueryDef.Tables = "counties"
pQueryDef.PostfixClause = "ORDER BY STATE_NAME COLLATE BINARY
ASC"