SQL ET POSTGRE 5.40 Null Values
Les valeurs NULL représentent l'absence de donnée dans une colonne SQL. Elles diffèrent fondamentalement de la chaîne vide ou du zéro : NULL signifie qu'aucune valeur n'a été renseignée, ou que la valeur est inconnue. Cette vidéo explique comment filtrer les lignes ayant une colonne NULL ou au contraire renseignée.
Opérateurs IS NULL et IS NOT NULL
La grande particularité du NULL est qu'on ne peut pas le tester avec l'opérateur égal. WHERE colonne = NULL ne renvoie jamais aucun résultat, même si des lignes ont effectivement une valeur NULL. Il faut utiliser l'opérateur dédié IS NULL :
SELECT *
FROM acteur
WHERE date_de_deces IS NULL;
Cette requête retourne tous les acteurs qui n'ont pas de date de décès renseignée (donc vraisemblablement vivants ou avec donnée manquante). L'inverse, IS NOT NULL, sélectionne les lignes où la colonne a une valeur, quelle qu'elle soit. C'est essentiel pour la qualité des données et la détection des champs obligatoires non remplis.
Quelques pièges classiques avec les NULL :
NULL = NULLrenvoie NULL (pas TRUE), donc impossible à tester en égalité- Les opérations arithmétiques avec NULL renvoient NULL :
NULL + 5 = NULL - Les concaténations avec NULL renvoient NULL en PostgreSQL standard
COUNT(colonne)ignore les NULL,COUNT(*)les compte- Fonctions utiles :
COALESCE(col, 'défaut')remplace NULL par une valeur
Bien gérer les NULL est crucial dans la modélisation. À la création de table, le mot-clé NOT NULL interdit l'absence de valeur. Pour une colonne qui peut légitimement être vide (date de décès, deuxième prénom, commentaire), on laisse la possibilité du NULL et on filtre proprement à l'affichage.