Conditions
Nous allons voir dans cette partie différentes possibilités de filtrage des lignes d’une table en SQL.
NULL
NULL
IS NULL
Une condition élémentaire peut porter sur la présence de valeurs NULL
, par exemple :
1SELECT nom, prenom, telephone2FROM Clients3WHERE telephone IS NULL;
Clients | ||
---|---|---|
nom | prenom | telephone |
Rey | Michel | |
Weiss | Dominique | |
Berlioz | Diane | |
Lefevre | Jean | |
Barda | Jérôme | |
Jacques | Chaoui |
Conditions
IS NOT NULL
Ou sur une condition élémentaire portant sur des valeurs non NULL
, par exemple :
1SELECT nom, prenom, telephone2FROM Clients3WHERE telephone IS NOT NULL;
Clients | ||
---|---|---|
nom | prenom | telephone |
Lebreton | Éléonore | 0776059929 |
Vasseur | Georges | +33 1 44 68 49 74 |
Da Costa | Léon | 0568740044 |
Listes
Listes
IN
1SELECT nom, prenom, ville2FROM Clients3WHERE ville IN ('Paris', 'Grenoble');
Clients | ||
---|---|---|
nom | prenom | ville |
Vasseur | Georges | Grenoble |
Da Costa | Léon | Paris |
Berlioz | Diane | Paris |
Barda | Jérôme | Paris |
Jacques | Chaoui | Paris |
Listes
NOT IN
1SELECT nom, prenom, ville2FROM Clients3WHERE ville NOT IN ('Paris', 'Grenoble');
Clients | ||
---|---|---|
nom | prenom | ville |
Lebreton | Éléonore | Meylan |
Rey | Michel | Vizille |
Weiss | Dominique | Lille |
Lefevre | Jean | Lyon |
Intervalle
Intervalle
Dans l’intervalle :
1SELECT *2FROM Commandes3WHERE dateCommande BETWEEN '2024-01-01' AND '2024-04-01';
Commandes | |||
---|---|---|---|
numero | numeroClient | dateCommande | statut |
1 | 1 | 2024-02-01 | livrée |
2 | 1 | 2024-03-15 | livrée |
Alternativement, on peut écrire :
1SELECT *2FROM Commandes3WHERE dateCommande >= '2024-01-01' AND dateCommande <= '2024-04-01';
Intervalle
En dehors de l’intervalle :
1SELECT *2FROM Commandes3WHERE dateCommande NOT BETWEEN '2024-01-01' AND '2024-04-01';
Commandes | |||
---|---|---|---|
numero | numeroClient | dateCommande | statut |
3 | 3 | 2024-04-28 | livrée |
4 | 4 | 2024-06-24 | annulée |
5 | 5 | 2024-06-30 | en cours |
6 | 5 | 2024-07-12 | en cours |
7 | 4 | 2024-08-19 | annulée |
Masques (wildcards)
Masques (wildcards)
Caractère seul
1SELECT *2FROM Clients3WHERE ville LIKE '_eclercq';
Clients |
---|
Ici le L
de Leclercq
est remplacé par un caractère quelconque, en utilisant le masque _
.
Masques (wildcards)
Chaine de caractères
1SELECT *2FROM Clients3WHERE ville LIKE '%cq%';
Clients |
---|
La requête renvoie les lignes pour lesquelles la valeur de la colonne ville
contient les lettres cq
, en utilisant le masque %
.
Masques (wildcards)
Remarques
-
Les symboles utilisés dans les masques :
_
(underscore) désigne un caractère quelconque%
désigne un suite de caractères éventuellement vide
-
Pour utiliser les caractères
_
et%
en tant que caractères normaux, il faut les préfixer d’un anti-slash\
:col LIKE 'user\_name'
value LIKE '100\%'
-
Un masque peut s’appliquer à une date :
dateCommande LIKE '2023%'
-
Les conditions admettent la forme négative :
dateCommande NOT LIKE '2023%'
Logiques
La condition de la clause WHERE
peut être composée d’une expression booléenne.
Exemple :
1SELECT *2FROM Clients3WHERE ville = 'Paris' AND categorie = 'C3';
Clients | ||||||||
---|---|---|---|---|---|---|---|---|
numero | nom | prenom | rue | codePostal | ville | telephone | categorie | compte |
3 | Da Costa | Léon | 18, boulevard Brigitte Faivre | 75000 | Paris | 0568740044 | C3 | -1500 |
Soit les expressions P
et Q
:
WHERE P AND Q
: sélectionne les lignes qui vérifient simultanémentP
etQ
WHERE P OR Q
: sélectionne les lignes qui vérifientP
ouQ
ou les deuxWHERE NOT P
: sélection les lignes qui ne vérifient pasP
L’usage de parenthèses permet d’exprimer des expressions plus complexes :
1WHERE COMPTE < 0 AND ( CAT = 'C1' OR LOCALITE = 'Paris' )
Conclusion
- Les conditions de sélection permettent de filtrer les lignes d’une table
- Les conditions de sélection sont définies dans la clause
WHERE
- Les conditions de sélection sont des expressions booléennes
- Les conditions de sélection peuvent être composées d’opérateurs de comparaison, logiques et de quantifieurs