🚀 Novembre a commencé ! SQLtest.online reste gratuit grâce aux dons de personnes comme vous. Aidez-nous à atteindre l'objectif de ce mois plus tôt pour que le site fonctionne sans interruption. Soutenir maintenant →
Code SQL copié dans le presse-papiers

NULL dans les bases de données relationnelles

Leçon 1.6 · Temps de lecture : ~6 min · Exercices pratiques ↓

NULL est la marque spéciale qu'utilisent les bases de données relationnelles quand une valeur manque, est inconnue ou ne s'applique pas. Dans cette leçon, vous apprendrez ce que signifie NULL, ce qu'il n'est pas, pourquoi les bases de données en ont besoin, quelles colonnes peuvent le contenir et pourquoi, avec NULL, la base répond « inconnu » au lieu de « oui » ou « non ».

Dans les leçons précédentes, nous avons vu les tables, les lignes, les colonnes et les types de données. Chaque cellule d'une table contient une valeur du type de sa colonne - sauf quand il n'y a rien à stocker.

Illustration montrant NULL comme une valeur manquante ou inconnue dans les colonnes d'une base de données relationnelle

Que signifie NULL ?

NULL n'est pas une valeur mais une marque : il indique que la cellule n'a pas de valeur. La raison peut varier : la valeur est inconnue, elle ne concerne pas cette ligne ou elle n'existe tout simplement pas encore.

NULL dans une table

La table rental de la base Sakila stocke les locations de films. Une location ne reçoit sa return_date qu'au retour du film ; jusque-là, la cellule vaut NULL :

rental_idrental_datereturn_date
140982005-08-21 00:30:32NULL
144692005-08-21 13:07:242005-08-24 10:37:24
146262005-08-21 18:35:442005-08-25 23:54:44

La location 14098 n'a pas été rendue : sa date de retour n'existe pas encore. Ce n'est ni « zéro » ni « une date vide » : il n'y a tout simplement rien.

Ce que NULL n'est pas

  • NULL n'est pas 0. Zéro est un vrai nombre : un prix de 0 veut dire « gratuit », un prix NULL veut dire « le prix est inconnu ».
  • NULL n'est pas une chaîne vide. '' est un texte sans caractères ; c'est une valeur connue. NULL signifie qu'il n'y a pas de texte du tout.
  • NULL n'est pas le mot 'NULL'. Le texte 'NULL' est une chaîne ordinaire de quatre lettres.
  • NULL n'est pas false. Dans la logique des bases de données, NULL signifie « inconnu », pas « non ».

Pourquoi les bases de données utilisent-elles NULL ?

Sans NULL, chaque valeur manquante demanderait une valeur de remplacement inventée comme 0, '' ou 1900-01-01, et ces valeurs se confondent avec les vraies données. NULL couvre honnêtement les cas typiques :

  • Inconnu : un client n'a pas donné de numéro de téléphone.
  • Non applicable : un particulier n'a pas de numéro SIRET d'entreprise.
  • Pas encore connu : une location n'a pas de date de retour tant que le film n'est pas revenu.

Quelles colonnes peuvent contenir NULL ?

Une colonne accepte ou non NULL selon la conception de la table. Une colonne déclarée NOT NULL doit toujours avoir une valeur : dans rental, la rental_date est obligatoire, tandis que la return_date peut rester vide. Une clé primaire ne peut jamais être NULL : une ligne doit toujours pouvoir être identifiée.

Une bonne règle : n'autorisez NULL que là où l'absence de valeur a vraiment un sens, et déclarez tout le reste NOT NULL.

NULL dans les calculs

Si une expression utilise NULL, le résultat est en général NULL lui aussi, car une valeur inconnue rend tout le résultat inconnu :

  • 10 + NULL vaut NULL.
  • 5 * NULL vaut NULL.
  • Le nombre de jours entre une date de location et une date de retour NULL vaut NULL : la location n'est pas encore terminée.

La logique à trois valeurs

D'habitude, une condition est soit vraie, soit fausse. Avec NULL apparaît une troisième réponse : UNKNOWN (« inconnu »). La location 14098 a-t-elle été rendue avant le 25 août ? Sa date de retour est inconnue, donc la réponse honnête est « inconnu ».

Il en va de même pour la comparaison de NULL avec NULL : on ne sait pas si deux valeurs inconnues sont égales, donc NULL = NULL vaut aussi UNKNOWN, et non vrai. C'est pourquoi les bases de données ont des tests spéciaux pour NULL au lieu des comparaisons habituelles : vous les utiliserez dès que vous écrirez des requêtes.


Points clés :

  • NULL marque une valeur manquante : inconnue, non applicable ou pas encore connue.
  • NULL n'est ni 0, ni une chaîne vide, ni le texte 'NULL', ni false.
  • Les colonnes déclarées NOT NULL et les clés primaires ne peuvent pas contenir NULL ; les autres colonnes le peuvent.
  • Les calculs avec NULL donnent en général NULL.
  • Les comparaisons avec NULL donnent un troisième résultat logique, UNKNOWN ; même NULL = NULL vaut UNKNOWN.

Questions fréquentes

NULL est-il la même chose qu'une chaîne vide ?

Non. Une chaîne vide '' est une valeur texte connue, sans caractères. NULL signifie qu'il n'y a aucune valeur.

NULL est-il égal à NULL ?

Pas au sens habituel. Chaque NULL représente une valeur inconnue, et on ne peut pas prouver que deux valeurs inconnues sont égales : comparer NULL avec NULL donne donc UNKNOWN.

N'importe quelle colonne peut-elle contenir NULL ?

Une colonne de n'importe quel type - nombre, texte ou date - peut contenir NULL, sauf si la table l'interdit avec NOT NULL. Les colonnes de clé primaire n'acceptent jamais NULL.

Questions d'entretien

Comment expliqueriez-vous NULL en entretien ?

NULL est une marque de valeur manquante : inconnue, non applicable ou pas encore connue. Ce n'est ni zéro, ni une chaîne vide, ni false, et il suit ses propres règles : les calculs avec NULL renvoient NULL, et les comparaisons avec lui renvoient UNKNOWN.

Qu'est-ce que la logique à trois valeurs ?

En SQL, une condition peut être TRUE, FALSE ou UNKNOWN. UNKNOWN apparaît dès qu'une comparaison implique NULL, car la base de données ne peut pas dire si une valeur inconnue satisfait la condition.

Pourquoi une clé primaire ne peut-elle pas être NULL ?

Une clé primaire identifie une ligne. Un identifiant inconnu ne le peut pas : deux lignes avec une clé NULL seraient impossibles à distinguer, c'est pourquoi les bases de données refusent NULL dans les colonnes de clé primaire.

Essayez de resoudre les exercices suivants pour consolider ce que vous avez appris dans cette lecon.

  1. Quelles cellules contiennent NULL ?
  2. Les calculs avec NULL
  3. Valeurs NULL dans la base de données