Dans le langage SQL, l’opérateur IS permet de filtrer les résultats qui contiennent la valeur NULL. Cet opérateur est indispensable car la valeur NULL est une valeur inconnue et ne peut par conséquent pas être filtrée par les opérateurs de comparaison (cf. égal, inférieur, supérieur ou différent).
Syntaxe
Pour filtrer les résultats où les champs d’une colonne sont à NULL il convient d’utiliser la syntaxe suivante:
SELECT * FROM `table` WHERE nom_colonne IS NULL
A l’inverse, pour filtrer les résultats et obtenir uniquement les enregistrements qui ne sont pas null, il convient d’utiliser la syntaxe suivante:
SELECT * FROM `table` WHERE nom_colonne IS NOT NULL
A savoir : l’opérateur IS retourne en réalité un booléen, c’est à dire une valeur TRUE si la condition est vrai ou FALSE si la condition n’est pas respectée. Cet opérateur est souvent utilisé avec la condition WHERE mais peut aussi trouvé son utilité lorsqu’une sous-requête est utilisée.
Exemple
Imaginons une application qui possède une table contenant les utilisateurs. Cette table possède 2 colonnes pour associer les adresses de livraison et de facturation à un utilisateur (grâce à une clé étrangère). Si cet utilisateur n’a pas d’adresse de facturation ou de livraison, alors le champ reste à NULL.
Table “utilisateur” :
id | nom | date_inscription | fk_adresse_livraison_id | fk_adresse_facturation_id |
---|---|---|---|---|
23 | Grégoire | 2013-02-12 | 12 | 12 |
24 | Sarah | 2013-02-17 | NULL | NULL |
25 | Anne | 2013-02-21 | 13 | 14 |
26 | Frédérique | 2013-03-02 | NULL | NULL |
Exemple 1 : utilisateurs sans adresse de livraison
Il est possible d’obtenir la liste des utilisateurs qui ne possèdent pas d’adresse de livraison en utilisant la requête SQL suivante:
SELECT * FROM `utilisateur` WHERE `fk_adresse_livraison_id` IS NULL
Résultat :
id | nom | date_inscription | fk_adresse_livraison_id | fk_adresse_facturation_id |
---|---|---|---|---|
24 | Sarah | 2013-02-17 | NULL | NULL |
26 | Frédérique | 2013-03-02 | NULL | NULL |
Les enregistrements retournés montrent bien que seul les utilisateurs ayant la valeur NULL pour le champ de l’adresse de livraison.
Exemple 2 : utilisateurs avec une adresse de livraison
Pour obtenir uniquement les utilisateurs qui possèdent une adresse de livraison il convient de lancer la requête SQL suivante:
SELECT * FROM `utilisateur` WHERE `fk_adresse_livraison_id` IS NOT NULL
Résultat :
id | nom | date_inscription | fk_adresse_livraison_id | fk_adresse_facturation_id |
---|---|---|---|---|
23 | Grégoire | 2013-02-12 | 12 | 12 |
25 | Anne | 2013-02-21 | 13 | 14 |
Les lignes retournés sont exclusivement celles qui n’ont pas une valeur NULL pour le champ de l’adresse de livraison.