Aujourd'hui, on continue à explorer NULL — le héros invisible des bases de données. Si tu penses encore que NULL c'est juste "rien", t'as raison, mais pas complètement. Dans cette leçon, on va apprendre à vérifier s'il y a des NULL dans nos données, et quoi faire avec. Alors, prêt à traquer l'absence de valeurs ?
On commence simple — imagine que tu bosses avec la base de données d'une boutique en ligne. T'as une table des commandes, et pour certaines commandes, y'a pas d'info sur les commentaires, alors que pour d'autres, y'a des remarques. Si tu veux chercher toutes les commandes sans remarques, mais que tu utilises les comparaisons classiques =, <>, tu vas être surpris... Pourquoi ? Parce que NULL c'est un cas spécial !
En SQL, pour checker la présence ou l'absence de NULL, on utilise IS NULL et IS NOT NULL. Ces opérateurs nous aident à gérer NULL et à choper les bonnes données.
Vérifier les valeurs avec IS NULL
IS NULL sert à vérifier si une colonne ou une expression contient la valeur NULL.
SELECT *
FROM orders
WHERE comment IS NULL;
Cette requête va retourner toutes les lignes où la colonne comment est à NULL. Pratique si tu veux trouver les commandes sans remarques.
Voilà un exemple de table orders :
| id | customer_name | total_amount | comment |
|---|---|---|---|
| 1 | Otto Art | 1500 | "Livraison urgente" |
| 2 | Maria Chi | 3000 | NULL |
| 3 | Alex Lin | 2000 | '' |
| 4 | Anna Song | 5000 | NULL |
Requête :
SELECT id, customer_name
FROM orders
WHERE comment IS NULL;
Résultat :
| id | customer_name |
|---|---|
| 2 | Maria Chi |
| 4 | Anna Song |
Remarque que les lignes avec la chaîne vide '' ne sont pas incluses ici, parce que '' c'est pas NULL.
Vérifier les valeurs avec IS NOT NULL
IS NOT NULL fait l'inverse ; il vérifie si la valeur n'est pas NULL. Par exemple, si tu veux toutes les commandes avec des commentaires renseignés :
SELECT *
FROM orders
WHERE comment IS NOT NULL;
Cette requête va retourner seulement les lignes où la colonne comment a une valeur (y compris les chaînes vides '').
Exemple
La table orders reste la même.
| id | customer_name | total_amount | comment |
|---|---|---|---|
| 1 | Otto Art | 1500 | "Livraison urgente" |
| 2 | Maria Chi | 3000 | NULL |
| 3 | Alex Lin | 2000 | '' |
| 4 | Anna Song | 5000 | NULL |
On lance la requête :
SELECT id, customer_name, comment
FROM orders
WHERE comment IS NOT NULL;
Résultat :
| id | customer_name | comment |
|---|---|---|
| 1 | Otto Art | "Livraison urgente" |
| 3 | Alex Lin | '' |
Fais gaffe, la ligne avec la chaîne vide '' est incluse. SQL considère que c'est une valeur "non vide".
Quand utiliser IS NULL et IS NOT NULL ?
Voici quelques scénarios :
- Filtrage des données : tu veux exclure les enregistrements incomplets où il manque des valeurs.
- Gestion des erreurs : parfois
NULLpeut vouloir dire qu'il y a eu une erreur de saisie, et tu veux isoler ces lignes. - Analyse des données : compter le nombre d'enregistrements avec des valeurs manquantes aide à voir la qualité des données.
Application pratique
On teste quelques cas pratiques :
Exercice 1 : Sélectionner les étudiants sans date de naissance renseignée
Imaginons que tu as une table students :
| id | name | birth_date |
|---|---|---|
| 1 | Otto Art | 2000-05-10 |
| 2 | Maria Chi | NULL |
| 3 | Alex Lin | 1998-12-30 |
| 4 | Anna Song | NULL |
Requête :
SELECT name
FROM students
WHERE birth_date IS NULL;
Résultat :
| name |
|---|
| Maria Chi |
| Anna Song |
Cette requête est utile pour trouver les étudiants dont il faut compléter la date de naissance.
Exercice 2 : Sélectionner les commandes avec commentaires
| id | customer_name | total_amount | comment |
|---|---|---|---|
| 1 | Otto Art | 1500 | "Livraison urgente" |
| 2 | Maria Chi | 3000 | NULL |
| 3 | Alex Lin | 2000 | '' |
| 4 | Anna Song | 5000 | NULL |
Pour la table orders, on peut trouver les commandes avec des commentaires remplis :
SELECT customer_name, comment
FROM orders
WHERE comment IS NOT NULL;
Résultat :
| customer_name | comment |
|---|---|
| Otto Art | "Livraison urgente" |
| Alex Lin | '' |
Comparaison avec les opérateurs classiques
Maintenant, faisons un pas de côté et essayons une requête "fausse" pour checker NULL :
SELECT *
FROM orders
WHERE comment = NULL;
Surpris ? Cette requête ne retourne aucune ligne, même celles où comment est clairement NULL. C'est parce qu'on ne peut pas comparer NULL avec les opérateurs standards. Pour ce genre de comparaisons, il faut obligatoirement utiliser IS NULL.
GO TO FULL VERSION