IS NULL / IS NOT NULL
NULL signifie « valeur inconnue » et ne se compare pas avec =. IS NULL et IS NOT NULL sont les seuls tests fiables pour trouver une donnée manquante, comme une classe sans professeur.
- NULL
- valeur manquante
- vide
- IS DISTINCT FROM
- logique trivalente
Syntaxe
WHERE colonne IS NULLWHERE colonne IS NOT NULLExemple
SELECT name AS classeFROM classesWHERE teacher_id IS NULL;-- Jeu de données : école-- WHERE teacher_id = NULL renverrait 0 ligne.-- Résultat attendu :-- 4ème AÀ retenir
- NULL n'est ni 0 ni la chaîne vide '' : c'est l'absence de valeur. Toute comparaison ou opération avec NULL donne NULL (NULL + 1 vaut NULL).
- Piège : WHERE status <> 'livré' écarte aussi les lignes où status est NULL, car la comparaison n'est pas vraie. Ajoutez OR status IS NULL si elles doivent rester.
- Pour comparer en traitant deux NULL comme égaux : a IS NOT DISTINCT FROM b (standard, accepté par SQLite 3.39+ et PostgreSQL), ou simplement a IS b dans SQLite.
- COALESCE(col, valeur) remplace NULL par une valeur de repli à l'affichage.
Voir aussi
- WHEREWHERE ne garde que les lignes qui vérifient une condition, avant tout regroupement. C'est le filtre de base pour cibler un client, une période, un statut ou une plage de valeurs.
- COALESCE & CASECASE introduit une logique « si… alors… sinon » dans une requête, COALESCE renvoie la première valeur non NULL. Ils servent à classer des lignes en catégories ou à remplacer une valeur manquante.
- LEFT JOINLEFT JOIN garde toutes les lignes de la table de gauche, avec ou sans correspondance à droite (les colonnes de droite valent alors NULL). Idéal pour compter des zéros ou repérer des absents.
- Piège NOT IN et NULLNOT IN renvoie zéro ligne dès que sa sous-requête contient un NULL, sans aucun message d'erreur. Pour chercher des éléments absents d'une autre table, NOT EXISTS donne toujours le bon résultat.