Skip to Content

Répondre au commentaire

[Manuel GRASS 6] Les fonctionnalités SQL dans GRASS


Fonctionnalités SQL dans GRASS GIS. Cet article est la traduction de la page originale du manuel utilisateur de GRASS 6 (en anglais), consacrée aux fonctionnalités SQL incorporées dans le noyau de GRASS.

Si vous n'utilisez que le pilote dbf fourni par défaut, vous n'aurez à votre disposition qu'un nombre limité de fonctions et d'opérateurs SQL. En associant GRASS à un SGBD, vous disposerez alors de fonctionnalités complètes sur vos tables attributaires.

 FONCTIONS

  ALTER TABLE table ADD [COLUMN] defchamps
  CREATE TABLE table ( defschamps )
  DROP TABLE table
  SELECT champs FROM table
  SELECT champs FROM table WHERE condition
  DELETE FROM table
  DELETE FROM table WHERE condition
  INSERT INTO table VALUES (valeur1[,valeur2,...])
  INSERT INTO table ( champs1[,champs2,...] ) VALUES (valeur1[,valeur2,...])
  UPDATE table SET assignation1[,assignation2,...]
  UPDATE table SET assignation1[,assignation2,...] WHERE condition

 OPERATEURS

  "="  : égal à
  "<"  : inférieur à
  "<=" : inférieur ou égal à
  ">"  : supérieur à
  ">=" : supérieur ou égal à
  "<>" : différent de
  "~"  : sous-chaîne identique à

Des expressions arithmétiques utilisant des constantes et des valeurs de champs sont permises dans les clauses conditionnelles ainsi que dans les clauses d'assignation. Les règles classiques de priorités et les parenthèses (en utilisant les symboles '(' et ')') sont gérées. La conversion de type est possible si vous le désirez (cette fonctionnalité est encore à l'état expérimental).

Les fonctions agrégées (sum, count, min, max,...) ne sont pour l'instant pas gérées dans les clauses SELECT.

Les fonctions mathématiques (sin, cos, exp, log,...) ne sont pour l'instant pas possibles dans les expressions.

Les clauses conditionnelles permettent d'utiliser des expressions booléennes en vous servant des opérateurs AND, OR et NOT, avec la règle de priorité classique entre ces expressions.

Vous pouvez connaître les valeurs nulles (NULLs) grâce à la condition 'colname IS NULL'. Sa réciproque s'énonce 'colname NOT NULL'.

 NOTES

  • SQL ne tolère pas les '.' (points) dans les noms de table.

  • Les caractères valides pour les noms de tables sont exclusivement :

    [A-Za-z][A-Za-z0-9_]*

  • Un nom de table doit commencer par une lettre et non un chiffre.

  • La recherche de chaînes de caractère à besoin que la partie de texte soit encadrée par des guillemets simples tandis que les recherches multiples seront encadrées par des doubles guillemets. Par exemple,

    d.vect map where="individual='juvenile' and area='beach'"

  • Un message d'erreur du type "dbmi: Protocol error" vous alerte soit sur un nom de champ invalide ou sur un type de champ non géré (le parser SQL GRASS a besoin d'être renforcé).

  • Les noms de champ en DBF sont limités à 10 caractères (définition DBF API)

 EXEMPLES

Affichage de tous les points vectoriels à l'exception de la vallée de LAMAR et des zones d'extensive trapping (dans cet exemple, les parenthèses ne sont pas indispensables) :

d.vect trapping_sites_points fcol=black icon=basic/diamond col=white size=13 \
where="valley <> 'LAMAR' OR (valley = 'LAMAR' AND description = 'extensive trapping')"

Sélectionne tous les attributs de la table où les valeurs du champ str1 sont différentes de 'No Name' :

echo "SELECT * FROM archsites WHERE str1 <> 'No Name'" | db.select

Exemple de manipulation des valeurs nulles :

v.db.addcol map=roads col="nulltest int"
v.db.update map=roads col=nulltest value=1 where="cat >2"
d.vect roads where="nulltest is null"
v.db.update map=roads col=nulltest value=2 where="cat <=2"

Exemples d'expressions complexes dans des clauses de mise à jour (en utilisant des modules v.db.*) :

v.db.addcol map=roads col="exprtest double"
v.db.update map=roads col=exprtest value=cat/nulltest
v.db.update map=roads col=exprtest value=cat/nulltest+cat where=cat=1

Exemples d'expressions complexes dans des clauses de mise à jour (en utilisant des modules db.*):

echo "UPDATE roads SET exprtest=null"
echo "UPDATE roads SET exprtest=cat/2" | db.execute
echo "UPDATE roads SET exprtest=cat/2+cat/3" | db.execute
echo "UPDATE roads SET exprtest=NULL WHERE cat>2" | db.execute
echo "UPDATE roads SET exprtest=cat/3*(cat+1) WHERE exprtest IS NULL" | db.execute"

En pratique, vous n'avez pas besoin de créer/mettre à jour des champs à l'aide d'expressions, mais vous pouvez vous en servir directement dans d'autres commandes :

d.vect roads where="(cat/3*(cat+1))>8"
d.vect roads where="cat>exprtest"

Site officiel : GRASS GIS


GNU FDL Copyright (C) Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License".

Répondre

Le contenu de ce champ sera maintenu privé et ne sera pas affiché publiquement.