Dans MySQL, le COALESCE()
renvoie la première valeur non NULL de la liste, ou NULL s'il n'y a pas de valeurs non NULL.
Syntaxe
La syntaxe ressemble à ceci :
COALESCE(value,...)
Exemple
Voici un exemple simple pour illustrer :
SELECT COALESCE(null, 'Fish', 'Rabbit');
Résultat :
Fish
Dans ce cas, Fish
était la première valeur non NULL, et donc COALESCE()
renvoyé cette valeur.
Rabbit
était également une valeur non NULL, mais elle venait après Fish
et donc il n'a pas été retourné.
Lorsque toutes les valeurs sont NULL
Si toutes les valeurs sont NULL
, COALESCE()
renvoie NULL
:
SELECT COALESCE( null, null );
Résultat :
NULL
Expressions
COALESCE()
renvoie la valeur actuelle de la première expression qui initialement n'est pas évaluée à NULL
. Par conséquent, si nous passons une expression comme celle-ci :
SELECT COALESCE( null, 2 * 10 );
Nous obtenons ceci :
20
Exemple de base de données
Supposons que nous lancions la requête suivante :
SELECT
PetName,
PetType
FROM Pets;
Et nous obtenons le résultat suivant :
PetName PetType ------- ------- Meow Cat Woof Dog Tweet Bird Awk NULL Moo Cow Omph NULL
Nous pouvons voir que deux lignes ont des valeurs NULL dans la colonne DOB.
Si nous voulions remplacer NULL
avec une autre valeur, nous pourrions modifier la requête comme suit :
SELECT
PetName,
COALESCE(PetType, 'Unknown') AS "PetType"
FROM Pets;
Résultat :
PetName PetType ------- ------- Meow Cat Woof Dog Tweet Bird Awk Unknown Moo Cow Omph Unknown
Dans ce cas, nous avons remplacé toutes les valeurs NULL par la chaîne Unknown
.
Il n'a pas besoin d'être une chaîne cependant. Voici un autre exemple qui remplace les valeurs NULL par un entier :
SELECT
EmployeeName,
Salary,
COALESCE(Salary, 0) AS "Salary (adjusted)"
FROM Employees;
Résultat :
EmployeeName Salary Salary (adjusted) -------------- ------ ----------------- Homer Einstein NULL 0 Bart Hawking 100000 100000
Nombre d'arguments non valides
Utilisation de COALESCE()
sans aucun argument génère une erreur :
SELECT COALESCE();
Résultat :
ERROR 1064 (42000) at line 1: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')' at line 1