Les opérateurs de comparaison et les opérateurs logiques
Les opérateurs de comparaison
La clause WHERE est définie par une condition qui s'exprime à l'aide d'opérateurs de comparaison et d'opérateurs logiques.
Les opérateurs de comparaison sont :
A = B
A <> B (différent)
A < B
A > B
A <= B (inférieur ou égal)
A >= B (supérieur ou égal)
A BETWEEN B AND C (compris entre B et C)
A IN (B1, B2,...) liste de valeurs :
ex : SELECT nom_comm, insee_comm, population FROM commune WHERE statut IN('Commune simple', 'Chef-lieu de canton')
A LIKE 'chaîne'
permet d'insérer des caractères jokers dans l'opération de comparaison, % désignant 0 à plusieurs caractères quelconques , _ désignant un seul caractère.
Ex : SELECT
* FROM commune WHERE nom_comm LIKE 'A%'
sélectionne toutes les communes dont le nom commence par A
SELECT * FROM commune WHERE nom_comm LIKE '%SAINT%'
sélectionne toutes les communes dont le nom contient la chaîne 'SAINT'
Attention : Sensibilité à la casse
SQL est sensible à la casse (majuscule / minuscule) pour les constantes, ainsi NOM_COMM LIKE '%A' est différent de NOM_COMM LIKE '%a'.
Les mots clefs et les noms de colonnes sont insensibles à la casse. On peut ainsi écrire SeLecT * fRom ma_TabLE. Une convention couramment utilisée est d'écrire les mots clefs en majuscule et les noms en minuscules exemple : SELECT * FROM ma_table
.
Dans PostgreSQL mettre les noms de colonnes entre guillemets double permet de les rendre sensibles à la casse, "ma_table" est différent de "MA_TABLE". Il est conseillé de donner des noms de champs en minuscules dans PostgreSQL.
Les chaînes de caractères des constantes sont en général entourées de guillemets simples (ex : 'SAINT %') qui est le caractère chr(39), cependant si la chaîne constante contient elle-même une apostrophe il faut la doubler (ex : SELECT
* FROM commune WHERE nom_com LIKE 'l'' %'
sélectionne toutes les communes dont le nom commence par l'
Remarque : Nombre ou chaîne de caractères
Les opérandes (A ou B) peuvent être des nombres ou des chaînes de caractères. Ainsi NOM_COMMUNE <> 'PARIS' est correct et sélectionne toutes les communes dont le nom n'est pas Paris
Fondamental : NULL
Une valeur par défaut peut-être attribuée à une colonne lors de la définition d'une table. Si aucune valeur par défaut n'est attribuée la valeur par défaut de la colonne est positionnée à NULL (0 ou espace n'est pas équivalent à NULL...c'est une différence importante par rapport à MapInfo).
Il est possible d'utiliser l'opérateur logique IS pour tester si un champ est ou non nul.
Exemple : SELECT
* FROM commune WHERE nom_comm IS NULL
récupère les enregistrement qui n'ont pas de nom de commune.
SELECT * FROM commune WHERE nom_comm IS NOT NULL
récupère ceux qui ont effectivement un nom (non positionné à NULL).
Les opérateurs logiques
OR : pour séparer deux conditions dont au moins une doit être vérifiée.
Ex : SELECT * FROM commune WHERE statut = 'Commune simple' OR STATUT = 'Chef-lieu de canton'
Cette requête sélectionne les communes pour lesquelles le statut est commune simple ou chef-lieu de canton.
Bien penser dans l'exemple ci-dessus que le OR lie deux conditions. Une condition contient nécessairement un des opérateurs de comparaison. Ainsi on ne peut écrire
SELECT
'* FROM commune WHERE statut = 'Commune simple' OR 'Chef-lieu de canton
AND : pour séparer deux conditions qui doivent être vérifiées simultanément.
Ex : SELECT
* FROM commune WHERE statut = 'Sous-préfecture' AND population > 10000
seules les sous-préfectures de plus de 10 000 habitants sont sélectionnées.
NOT : permet d'inverser une condition.
Ex : SELECT
* from commune WHERE NOT (statut = 'Commune simple' OR statut = 'Chef-lieu de canton')
sélectionne les communes qui ne sont ni commune simple, ni chef lieu de canton.