SQL Quest
Se connecter English 0 XP Niv. 1
Débutant

SQL NULL : gérer les valeurs manquantes

4 min de lecture · 4 exemples exécutables · mis à jour le 9 octobre 2026

Dans une table, certaines informations peuvent manquer : un âge non renseigné, un employé sans manager… SQL représente ces cases vides par une valeur spéciale, NULL. C'est l'une des notions qui piège le plus les débutants, car NULL ne se compare pas comme une valeur normale.

Syntaxe

WHERE colonne IS NULL
WHERE colonne IS NOT NULL
COALESCE(colonne, valeur_par_defaut)

Comment ça marche

NULL veut dire « inconnu »

NULL n'est ni 0, ni une chaîne vide : c'est l'absence de valeur. Comparer quelque chose à une valeur inconnue donne un résultat inconnu. C'est pourquoi age = NULL n'est jamais vrai, même quand l'âge est manquant.

Pour tester une valeur manquante, il existe deux opérateurs dédiés : IS NULL et IS NOT NULL.

NULL dans les calculs

  • Un calcul avec NULL donne NULL : NULL + 5 vaut NULL.
  • Les fonctions d'agrégation SUM, AVG, MIN, MAX et COUNT(colonne) ignorent les NULL. COUNT(*), lui, compte toutes les lignes.

Remplacer NULL par une valeur

COALESCE(a, b, c) renvoie la première valeur non NULL de la liste. COALESCE(age, 0) affiche 0 à la place d'un âge manquant. SQLite propose aussi IFNULL(a, b).

Schéma

clients
prenomage
Léa34
HugoNULL
Inès27
AdamNULL
résultat
prenomage
HugoNULL
AdamNULL
WHERE age IS NULL : seules les lignes sans âge renseigné sont gardées.

Schéma simplifié pour illustrer le principe. Les exemples ci-dessous utilisent la vraie base d'exercices de SQL Quest (une boutique en ligne fictive : voir le schéma complet).

Exemples avec leurs résultats

1. Trouver les valeurs manquantes

Les clients dont l'âge n'est pas renseigné.

SELECT prenom, nom, age
FROM clients
WHERE age IS NULL;
Essayer dans le bac à sable
Résultat
prenomnomage
ClaraFaureNULL
LucasBlancNULL
KarimFontaineNULL
ClaraLefebvreNULL

4 lignes au total

2. Remplacer NULL à l'affichage

COALESCE remplace l'âge manquant par un texte.

SELECT prenom, nom, COALESCE(age, 'non renseigné') AS age
FROM clients
WHERE age IS NULL OR id <= 3;
Essayer dans le bac à sable
Résultat
prenomnomage
SamirDubois59
SamirMartin25
ZoéLaurent36
ClaraFaurenon renseigné
LucasBlancnon renseigné
KarimFontainenon renseigné
ClaraLefebvrenon renseigné

7 lignes au total

3. COUNT(*) contre COUNT(colonne)

COUNT(*) compte toutes les lignes, COUNT(age) seulement celles où l'âge est connu.

SELECT COUNT(*) AS clients, COUNT(age) AS ages_connus
FROM clients;
Essayer dans le bac à sable
Résultat
clientsages_connus
120116

1 ligne au total

4. Les employés sans manager

Le PDG n'a pas de manager : sa colonne manager_id vaut NULL.

SELECT prenom, nom, poste
FROM employes
WHERE manager_id IS NULL;
Essayer dans le bac à sable
Résultat
prenomnomposte
ChloéDuboisPDG

1 ligne au total

Les erreurs fréquentes

Écrire = NULL

La condition = NULL n'est jamais vraie : la requête ne renvoie aucune ligne, sans message d'erreur.

À éviter
SELECT * FROM clients WHERE age = NULL;
Correct
SELECT * FROM clients WHERE age IS NULL;

Oublier les NULL avec <>

age <> 30 écarte aussi les âges inconnus, car comparer NULL ne donne jamais vrai. Ajoutez OR age IS NULL si vous voulez les garder.

À éviter
SELECT COUNT(*) FROM clients WHERE age <> 30;
Correct
SELECT COUNT(*) FROM clients WHERE age <> 30 OR age IS NULL;

Confondre NULL et chaîne vide

Une chaîne vide '' est une vraie valeur (du texte de longueur 0). Elle n'est pas trouvée par IS NULL.

À éviter
SELECT * FROM clients WHERE email = NULL;
Correct
SELECT * FROM clients WHERE email IS NULL OR email = '';

Exercices

Essayez d'écrire la requête vous-même avant d'ouvrir la solution.

Défi 1. Comptez le nombre de clients dont l'âge est renseigné.

Voir une solution
SELECT COUNT(*) FROM clients WHERE age IS NOT NULL;
COUNT(*)
116

1 ligne au total

Essayer dans le bac à sable

Défi 2. Affichez le prénom de chaque employé et son manager_id, en remplaçant les manager_id manquants par 0.

Voir une solution
SELECT prenom, COALESCE(manager_id, 0) AS manager FROM employes;
prenommanager
Chloé0
Jade1
Nathan1
Samir1
Alice2
Nathan2
Lucas2
Emma2

25 lignes au total · 8 affichées

Essayer dans le bac à sable
Envie de vous entraîner davantage ?

Les exercices interactifs sont corrigés automatiquement, avec un prof qui explique vos erreurs. Une leçon résumée reste affichée à côté de l'éditeur.

Faire les exercices interactifs

Questions fréquentes

Pourquoi WHERE colonne = NULL ne renvoie rien ?

Parce que NULL signifie « inconnu » : comparer une valeur à un inconnu ne donne ni vrai ni faux, mais inconnu, et WHERE ne garde que les conditions vraies. Il faut écrire IS NULL.

Quelle différence entre COALESCE et IFNULL ?

IFNULL(a, b) accepte deux valeurs et existe en SQLite et MySQL. COALESCE accepte autant de valeurs que l'on veut et fait partie du SQL standard : il marche partout.

AVG tient-il compte des NULL ?

Non, AVG ignore les NULL : il fait la moyenne des seules valeurs connues. Pour compter les NULL comme 0, écrivez AVG(COALESCE(colonne, 0)).

À lire ensuite