Gestion des NULL (COALESCE/NVL/NULLIF/IS NULL)
Oracle
-- COALESCE: returns the first non-NULL value (standard)
SELECT name, COALESCE(phone, mobile, 'none') AS contact FROM customer;
-- Oracle-specific NVL / NVL2
SELECT NVL(balance, 0) FROM customer;
SELECT NVL2(discount, 'yes', 'no') FROM orders;
-- NULLIF and IS NULL
SELECT NULLIF(a, b) FROM t; -- NULL if a=b
SELECT name FROM customer WHERE phone IS NULL;Pour gérer NULL (valeur inconnue) : COALESCE renvoie la première valeur non NULL de la liste (standard, plusieurs arguments). NVL(a,b) d'Oracle est l'équivalent à deux arguments ; NVL2 renvoie des valeurs différentes selon que la valeur est NULL ou non. NULLIF(a,b) renvoie NULL si elles sont égales. Testez toujours NULL avec IS NULL / IS NOT NULL (= NULL ne fonctionne pas).
PostgreSQL
SELECT name, COALESCE(phone, mobile, 'none') AS contact FROM customer;
SELECT NULLIF(divisor, 0) FROM t; -- prevent division by zero
SELECT name FROM customer WHERE phone IS NULL;
-- The equivalent of Oracle NVL is COALESCEPostgreSQL offre COALESCE, NULLIF et IS NULL/IS NOT NULL standard ; utilisez COALESCE au lieu du NVL d'Oracle. Utilisez IS, et non =, pour les comparaisons avec NULL ; si deux NULL doivent être considérés comme égaux, l'opérateur 'IS NOT DISTINCT FROM' fait l'affaire.
MySQL
SELECT name, COALESCE(phone, mobile, 'none') AS contact FROM customer;
-- MySQL shortcut: IFNULL (two arguments)
SELECT IFNULL(balance, 0) FROM customer;
SELECT NULLIF(a, b) FROM t;
SELECT name FROM customer WHERE phone IS NULL;MySQL/MariaDB prennent en charge COALESCE et NULLIF standard ; IFNULL(a,b) est un raccourci à deux arguments (semblable à NVL d'Oracle). L'opérateur <=> fournit une égalité sûre vis-à-vis de NULL (traite deux NULL comme égaux). NULL se teste avec IS NULL / IS NOT NULL.
SQL Server
SELECT name, COALESCE(phone, mobile, 'none') AS contact FROM customer;
-- SQL Server shortcut: ISNULL (two arguments)
SELECT ISNULL(balance, 0) FROM customer;
SELECT NULLIF(a, b) FROM t;
SELECT name FROM customer WHERE phone IS NULL;SQL Server offre COALESCE standard (plusieurs arguments, avec promotion de type de données) et ISNULL(a,b) à deux arguments ; les deux diffèrent subtilement (COALESCE est standard et plus souple quant à la priorité des types). NULLIF et IS NULL sont aussi pris en charge. ISNULL est l'équivalent de NVL d'Oracle (les noms se ressemblent).
MongoDB
// COALESCE equivalent: $ifNull
db.customer.aggregate([
{ $project: { name: 1,
contact: { $ifNull: ["$phone", "$mobile", "none"] } } }
])
// NULL / missing field check:
db.customer.find({ phone: { $in: [null] } })Dans l'agrégation MongoDB, l'équivalent de COALESCE est l'opérateur $ifNull (plusieurs arguments, renvoie le premier qui n'est pas null/absent). Dans une requête, { field: null } correspond à la fois aux documents dont la valeur est null et à ceux où le champ est totalement absent ; rendez la distinction explicite avec { field: { $type: 'null' } } ou $exists.
Redis
# Instead of NULL, Redis has the concept of 'no such key/field':
EXISTS customer:1 # does the key exist?
HGET customer:1 phone # returns nil if the field is absent
GET missing_key # (nil)Redis n'a pas de NULL au sens SQL ; l'équivalent est une clé absente ou un champ de Hash absent, et les commandes renvoient alors nil. La logique de valeur par défaut (comme COALESCE) s'applique côté application avec une vérification de nil. L'existence d'un champ se vérifie avec HEXISTS.
Elasticsearch
# Default assignment when a field is missing (missing bucket / null_value)
# Find documents without the field in a query:
GET customer/_search
{ "query": { "bool": { "must_not": { "exists": { "field": "phone" } } } } }
# Map empty values to a specific value with null_value in the mappingDans Elasticsearch, les champs null ou absents se vérifient avec la requête 'exists' (must_not exists = documents sans le champ). Pour une valeur par défaut de type COALESCE, définissez 'null_value' dans le mapping, ou attribuez une valeur aux entrées absentes avec le paramètre 'missing' dans les agrégations. Les valeurs par défaut peuvent aussi être produites avec des runtime fields/scripts.