Il est temps de parler un peu plus en détail de NULL. Et ce n'est pas juste du blabla, même si notre héros a l'air de... rien du tout. Si une table était une maison, NULL serait son fantôme — silencieux, mystérieux et imprévisible. Il est là, mais il ne répond pas aux questions, il ne participe pas aux calculs, il évite les comparaisons. Ce n'est pas juste "vide" — c'est "on ne sait rien".
Dans le monde SQL, NULL — ce n'est pas zéro, ce n'est pas une chaîne vide et ce n'est pas "pas de données" au sens habituel. C'est un signe spécial d'inconnu, avec lequel il faut faire gaffe. Aujourd'hui, on va voir pourquoi NULL n'est pas juste un invité bizarre, mais un acteur clé de toute base de données. Parce qu'il veut littéralement dire "valeur inconnue ou non définie".
Quelle est la différence entre NULL, la chaîne vide ou le nombre 0 ?
Plein de débutants confondent NULL avec d'autres valeurs, comme la chaîne vide '' ou le nombre 0. Regardons les différences clés :
| Concept | Valeur |
|---|---|
NULL |
Absence totale de valeur. Ce n'est pas juste une boîte vide, c'est l'absence de boîte |
| Chaîne vide | C'est une chaîne qui n'a tout simplement aucun caractère. Par exemple : '' |
Nombre 0 |
Une valeur qui représente un nombre précis, égal à zéro |
Exemple dans la vraie vie : imagine que tu as une table d'employés et que tu stockes leurs salaires. Si le salaire est indiqué comme 0, ça veut dire que la personne n'a rien touché. Mais si le salaire est NULL, alors tu ne sais tout simplement pas combien il ou elle gagne (ou ce n'est pas encore défini).
Comment interpréter NULL
Maintenant qu'on sait un peu ce que c'est que NULL, voyons comment SQL le gère. Le plus important à retenir sur NULL tient en une phrase : NULL n'est égal à rien et n'est pas inégal à rien, même pas à lui-même.
SELECT NULL = NULL; -- Résultat : FAUX
Surprise ! Pourquoi ? Parce que NULL — c'est l'inconnu. Si tu as deux valeurs inconnues, tu ne peux pas affirmer qu'elles sont égales, ni qu'elles ne le sont pas.
Regardons quelques exemples :
Exemples d'opérations avec NULL
SELECT NULL + 1; -- Résultat : NULL
SELECT NULL * 100; -- Résultat : NULL
SELECT NULL = 0; -- Résultat : FAUX
SELECT NULL <> 0; -- Résultat : FAUX
NULL dans une addition, une multiplication ou n'importe quel calcul retourne toujours NULL. Ici, NULL ne fonctionne pas du tout comme 0 en maths. C'est comme si tu jetais quelque chose dans le vide et que ce vide avalait tout.
Exemples pratiques
Imaginons une table students avec des infos sur les étudiants :
| id | name | birth_date | grade |
|---|---|---|---|
| 1 | Alice | 2000-01-01 | 85 |
| 2 | Bob | NULL | 90 |
| 3 | Charlie | 1999-05-22 | NULL |
| 4 | Diana | NULL | NULL |
Exemple 1 : Influence de NULL dans les conditions
Si on essaie de trouver tous les étudiants sans date de naissance, en mettant la condition WHERE birth_date = NULL :
SELECT *
FROM students
WHERE birth_date = NULL;
On n'aura aucun résultat, parce que NULL = NULL retourne FAUX. Pour tester si une valeur est NULL, il faut utiliser IS NULL :
SELECT * FROM students WHERE birth_date IS NULL;
Résultat :
| id | name | birth_date | grade |
|---|---|---|---|
| 2 | Bob | NULL | 90 |
| 4 | Diana | NULL | NULL |
Exemple 2 : Influence de NULL dans les calculs
| id | name | birth_date | grade |
|---|---|---|---|
| 1 | Alice | 2000-01-01 | 85 |
| 2 | Bob | NULL | 90 |
| 3 | Charlie | 1999-05-22 | NULL |
| 4 | Diana | NULL | NULL |
Si on essaie de calculer la moyenne des notes de tous les étudiants :
SELECT AVG(grade) FROM students;
Le résultat sera : 87.5. Pourquoi ? Parce que NULL est ignoré dans les fonctions d'agrégation comme AVG, SUM, MIN, MAX. Mais fais gaffe ! Si tu veux prendre en compte les lignes avec NULL, il faudra bidouiller un peu plus.
On verra plus en détail comment bosser avec NULL dans les prochaines leçons.
GO TO FULL VERSION