In MySQL is de COALESCE()
operator retourneert de eerste niet-NULL-waarde in de lijst, of NULL als er geen niet-NULL-waarden zijn.
Syntaxis
De syntaxis gaat als volgt:
COALESCE(value,...)
Voorbeeld
Hier is een eenvoudig voorbeeld om te demonstreren:
SELECT COALESCE(null, 'Fish', 'Rabbit');
Resultaat:
Fish
In dit geval Fish
was de eerste niet-NULL-waarde, en dus COALESCE()
heeft die waarde geretourneerd.
Rabbit
was ook een niet-NULL-waarde, maar kwam na Fish
en dus werd het niet teruggestuurd.
Als alle waarden NULL zijn
Als alle waarden NULL
zijn , COALESCE()
retourneert NULL
:
SELECT COALESCE( null, null );
Resultaat:
NULL
Uitdrukkingen
COALESCE()
geeft de huidige waarde terug van de eerste uitdrukking die aanvankelijk niet resulteert in NULL
. Daarom, als we een uitdrukking als deze doorgeven:
SELECT COALESCE( null, 2 * 10 );
We krijgen dit:
20
Databasevoorbeeld
Stel dat we de volgende query uitvoeren:
SELECT
PetName,
PetType
FROM Pets;
En we krijgen het volgende resultaat:
PetName PetType ------- ------- Meow Cat Woof Dog Tweet Bird Awk NULL Moo Cow Omph NULL
We kunnen zien dat twee rijen NULL-waarden hebben in de DOB-kolom.
Als we NULL
willen vervangen met een andere waarde, kunnen we de zoekopdracht als volgt wijzigen:
SELECT
PetName,
COALESCE(PetType, 'Unknown') AS "PetType"
FROM Pets;
Resultaat:
PetName PetType ------- ------- Meow Cat Woof Dog Tweet Bird Awk Unknown Moo Cow Omph Unknown
In dit geval hebben we alle NULL-waarden vervangen door de tekenreeks Unknown
.
Het hoeft echter geen string te zijn. Hier is nog een voorbeeld dat NULL-waarden vervangt door een geheel getal:
SELECT
EmployeeName,
Salary,
COALESCE(Salary, 0) AS "Salary (adjusted)"
FROM Employees;
Resultaat:
EmployeeName Salary Salary (adjusted) -------------- ------ ----------------- Homer Einstein NULL 0 Bart Hawking 100000 100000
Ongeldig aantal argumenten
COALESCE()
gebruiken zonder argumenten resulteert in een fout:
SELECT COALESCE();
Resultaat:
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