In MariaDB, 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, 'Red', 'Black');
Resultaat:
Red
In dit geval Red
was de eerste niet-NULL-waarde, en dus COALESCE()
heeft die waarde geretourneerd.
Black
was ook niet-NULL, maar kwam na Red
en dus werd het niet teruggestuurd.
Databasevoorbeeld
Stel dat we de volgende query uitvoeren:
SELECT
PetName,
DOB AS "Date of Birth"
FROM Pets;
En we krijgen het volgende resultaat:
+---------+---------------+ | PetName | Date of Birth | +---------+---------------+ | Fluffy | 2020-11-20 | | Fetch | 2019-08-16 | | Scratch | 2018-10-01 | | Wag | 2020-03-15 | | Tweet | 2020-11-28 | | Fluffy | 2020-09-17 | | Bark | NULL | | Meow | NULL | +---------+---------------+
We kunnen zien dat de laatste 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(DOB, 'None Supplied') AS "Date of Birth"
FROM Pets;
Resultaat:
+---------+---------------+ | PetName | Date of Birth | +---------+---------------+ | Fluffy | 2020-11-20 | | Fetch | 2019-08-16 | | Scratch | 2018-10-01 | | Wag | 2020-03-15 | | Tweet | 2020-11-28 | | Fluffy | 2020-09-17 | | Bark | None Supplied | | Meow | None Supplied | +---------+---------------+
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, 5 * 2 );
We krijgen dit:
10
Als alle waarden NULL zijn
Als alle waarden NULL
zijn , COALESCE()
retourneert NULL
:
SELECT COALESCE( null, null );
Resultaat:
NULL
COALESCE()
vs IFNULL()
Bij gebruik met twee waarden, COALESCE()
werkt hetzelfde als IFNULL
:
SET @a = null, @b = 52;
SELECT
COALESCE(@a, @b),
IFNULL(@a, @b);
Resultaat:
+------------------+----------------+ | COALESCE(@a, @b) | IFNULL(@a, @b) | +------------------+----------------+ | 52 | 52 | +------------------+----------------+
Ongeldig aantal argumenten
COALESCE()
gebruiken zonder argumenten resulteert in een fout:
SELECT COALESCE();
Resultaat:
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ')' at line 1