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.
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.
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.
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.
SELECT
nom,
COALESCE(telephone, email, 'Non renseigné') AS contact
FROM clients
ORDER BY nom ASC;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.
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.
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.