Pour préciser la ou les conditions que les lignes doivent respecter pour être sélectionnées dans la table, faites suivre l'instruction SELECT de la clause WHERE. Un critère de sélection de lignes dans une table est appelé condition de recherche.
Une condition de recherche se compose d'un ou de plusieurs
prédicats. Un prédicat demande que la ligne respecte une
condition vraie ou fausse (ou encore inconnue). Les prédicats de base
suivants peuvent être utilisés dans une clause WHERE pour préciser les
conditions à respecter :
Prédicat | Fonction |
---|---|
x = y | x est égal à y |
x <> y | x est différent de y |
x < y | x est inférieur à y |
x > y | x est supérieur à y |
x <= y | x est inférieur ou égal à y |
x >= y | x est supérieur ou égal à y |
IS NULL/IS NOT NULL | Recherche les valeurs NULL |
Lorsque vous élaborez les conditions de recherche, veillez à ne demander des opérations arithmétiques que sur les données de type numérique et à ne comparer que des données de types compatibles. Par exemple, il est impossible de comparer des chaînes de texte à des nombres.
Si vous sélectionnez des lignes en fonction d'une valeur alphanumérique, pensez à placer cette dernière entre apostrophes (par exemple, WHERE JOB = 'Clerk') et à la taper telle qu'elle existe dans la base de données. Si la valeur est en minuscules dans la base de données et que vous la tapez en majuscules, aucune ligne n'est sélectionnée. Si vous sélectionnez des lignes en fonction d'une valeur numérique, ne mettez-pas celle-ci entre apostrophes (par exemple, WHERE DEPT = 20).
L'exemple suivant ne sélectionne, dans la table STAFF, que les lignes portant le numéro de service 20 :
SELECT DEPT, NAME, JOB FROM STAFF WHERE DEPT = 20
Cette instruction donne le résultat suivant :
DEPT NAME JOB ------ --------- ----- 20 Sanders Mgr 20 Pernal Sales 20 James Clerk 20 Sneider Clerk
L'exemple suivant utilise une fonction AND pour préciser plusieurs conditions. Il est possible de préciser autant de conditions que nécessaire. L'exemple sélectionne, dans la table STAFF, les employés de production (Clerk) du service 20 :
SELECT DEPT, NAME, JOB FROM STAFF WHERE JOB = 'Clerk' AND DEPT = 20
Cette instruction donne le résultat suivant :
DEPT NAME JOB ------ --------- ----- 20 James Clerk 20 Sneider Clerk
Si la colonne n'a pas de valeur par défaut et si vous ne précisez aucune valeur, elle prend la valeur NULL. C'est également le cas si vous avez spécifiquement demandé la valeur NULL. Les colonnes n'acceptent la valeur NULL que si leur définition le prévoit. La définition et la prise en charge des valeurs NULL sont abordées dans la section Création de tables.
Pour rechercher une valeur NULL, utilisez les prédicats IS NULL et IS NOT NULL.
L'instruction suivante établit la liste des employés dont la commission est inconnue :
SELECT ID, NAME FROM STAFF WHERE COMM IS NULL
Cette instruction donne le résultat suivant :
ID NAME ------ --------- 10 Sanders 30 Marenghi 50 Hanes 100 Plotz 140 Fraye 160 Molinare 210 Lu 240 Daniels 260 Jones 270 Lea 290 Quill
La valeur zéro n'est pas identique à la valeur NULL. L'instruction suivante sélectionne tous les employés de la table dont la commission est égale à zéro :
SELECT ID, NAME FROM STAFF WHERE COMM = 0
Comme il n'y a pas de valeur égale à zéro dans la colonne COMM du modèle de table, le résultat est vide.
L'exemple suivant sélectionne toutes les lignes de la table STAFF où la colonne YEARS a une valeur supérieure à 9 :
SELECT NAME, SALARY, YEARS FROM STAFF WHERE YEARS > 9
Cette instruction donne le résultat suivant :
NAME SALARY YEARS --------- --------- ------ Hanes 20659.80 10 Lu 20010.00 10 Jones 21234.00 12 Quill 19818.00 10 Graham 21000.00 13