Leçon 5 sur 6

Gérer les valeurs absentes avec NULL et COALESCE

Détectez les informations manquantes et remplacez-les par une valeur de présentation adaptée au contexte.

19 minAccès gratuit

À la fin de cette leçon

  • Interpréter correctement NULL
  • Filtrer avec IS NULL et IS NOT NULL
  • Fournir une valeur de remplacement avec COALESCE

NULL représente une valeur absente ou inconnue

NULL n’est ni zéro, ni une chaîne vide, ni le mot « NULL ». Il indique qu’aucune valeur exploitable n’est enregistrée dans la colonne.

L’absence peut avoir plusieurs causes : information non demandée, non disponible ou sans objet. L’interprétation métier doit donc être documentée.

Avant de remplacer NULL, demandez-vous ce que l’absence signifie. Zéro et inconnu ne racontent pas la même chose.

IS NULL détecte les valeurs absentes

Une comparaison ordinaire comme ville = NULL ne fonctionne pas, car une valeur inconnue ne peut pas être déclarée égale à une autre valeur.

Utilisez IS NULL pour les valeurs absentes et IS NOT NULL pour les valeurs renseignées.

  • Correct : telephone IS NULL.
  • Correct : telephone IS NOT NULL.
  • Incorrect : telephone = NULL.
Clients sans téléphone
SELECT id_client, nom
FROM clients
WHERE telephone IS NULL
ORDER BY id_client ASC;

Les comparaisons avec NULL produisent un résultat inconnu

La condition remise > 0 ne conserve pas une ligne dont la remise vaut NULL. SQL ne suppose pas que l’absence signifie zéro.

Si le besoin métier considère une remise absente comme nulle, rendez cette règle explicite avec COALESCE.

Appliquer une règle métier explicite
SELECT produit
FROM produits
WHERE COALESCE(remise, 0) = 0;

COALESCE choisit la première valeur non NULL

COALESCE examine ses arguments de gauche à droite et retourne le premier qui n’est pas NULL. Il peut fournir un libellé lisible dans un rapport sans modifier les données stockées.

Les valeurs proposées doivent avoir des types compatibles. Pour une colonne texte, utilisez un texte ; pour un montant, utilisez un nombre adapté au calcul.

Afficher un contact disponible
SELECT
  nom,
  COALESCE(telephone, email, 'Non renseigné') AS contact
FROM clients
ORDER BY nom ASC;
COALESCE dans SELECT change seulement l’affichage du résultat. La colonne d’origine reste inchangée.

Anticiper l’effet de NULL sur les calculs

La plupart des fonctions d’agrégation ignorent les valeurs NULL. COUNT(*) compte les lignes, tandis que COUNT(telephone) compte uniquement les téléphones renseignés.

Remplacer une valeur inconnue par zéro avant une moyenne peut changer fortement l’indicateur. N’appliquez cette règle que si zéro est réellement la bonne valeur métier.

Comparer lignes et valeurs renseignées
SELECT
  COUNT(*) AS nombre_clients,
  COUNT(telephone) AS telephones_renseignes
FROM clients;

Vérifiez votre compréhension

Affichez le nom de chaque client et son téléphone. Si le téléphone est absent, affichez Non renseigné. Triez par identifiant client.

À compléter
SELECT nom,
  -- valeur de remplacement AS telephone
FROM clients
ORDER BY id_client ASC;

Progression locale

Avez-vous terminé cette leçon ?

Votre choix reste dans votre navigateur et ne nécessite aucun compte.

Leçon suivante