In MariaDB, de IFNULL()
functie stelt ons in staat om NULL-waarden te vervangen door een andere waarde.
Syntaxis
IFNULL(expr1,expr2)
Als expr1
is niet NULL
, IFNULL()
retourneert expr1
; anders retourneert het expr2
.
Ook van MariaDB 10.3, NVL()
kan worden gebruikt als een alias voor de IFNULL()
functie. Daarom hebben we de mogelijkheid om in plaats daarvan de volgende syntaxis te gebruiken:
NVL(expr1,expr2)
Het resultaat is hetzelfde, ongeacht welke syntaxis wordt gebruikt.
Voorbeeld
Hier is een eenvoudig voorbeeld dat de NULL
. gebruikt constante:
SELECT IFNULL( null, 'No Value' );
Resultaat:
No Value
In dit geval gebruikte ik IFNULL()
om de NULL-waarde te vervangen door No Value
.
Dit is wat er gebeurt als het eerste argument niet NULL
is :
SELECT IFNULL( 'Spicy', 'No Value' );
Resultaat:
Spicy
In dit geval wordt het eerste argument geretourneerd, omdat het niet NULL
. is .
Databasevoorbeeld
Stel dat we de volgende query uitvoeren:
SELECT * FROM Employees;
Resultaat:
empId name dept ----- ----- ----- 1 Jess Sales 2 Rohit NULL 3 Zohan Sales 4 Homer NULL
We kunnen zien dat twee rijen NULL-waarden hebben in de dept
kolom.
In de volgende query gebruiken we IFNULL()
om de NULL-waarden te vervangen door een meer betekenisvolle waarde voor de lezer:
SELECT
empId,
name,
IFNULL( dept, 'Not yet assigned' ) AS dept
FROM Employees;
Resultaat:
empId name dept ----- ----- ---------------- 1 Jess Sales 2 Rohit Not yet assigned 3 Zohan Sales 4 Homer Not yet assigned
Uitdrukkingen
De huidige waarde van het eerste argument wordt geëvalueerd. Daarom, als we een uitdrukking als de volgende leveren:
SELECT IFNULL( 3 * 7, 0 );
We krijgen dit:
21
We krijgen dus niet de 3 * 7
deel. We krijgen het resultaat van die uitdrukking (in dit geval 21
).
Hetzelfde geldt wanneer het resultaat van de expressie NULL
. is . Als we bijvoorbeeld de volgende code uitvoeren:
SELECT IFNULL( 3 / 0, 0 );
We krijgen dit:
0.0000
Dit is echter een gevaarlijk voorbeeld. Nul is een waarde. NULL
is niet.
Het retourneren van nul wanneer er een NULL-waarde is, kan misleidend of zelfs helemaal verkeerd zijn. Stel je voor dat we te maken hadden met prijzen. We kunnen eindigen met een prijs van nul, wat onjuist kan zijn en het bedrijf veel geld kan kosten.
Daarom is het in dergelijke gevallen meestal beter om een betekenisvollere waarde te gebruiken die de lezer duidelijk maakt dat er geen waarde is.
Voorbeeld:
SELECT IFNULL( 3 / 0, 'No value' );
Resultaat:
No Value
De NVL()
Functie
Beginnend met MariaDB 10.3, NVL()
is een alias voor IFNULL()
. Daarom kunnen we IFNULL()
. vervangen met NVL()
in een van de bovenstaande voorbeelden.
Voorbeeld:
SELECT NVL( 3 / 0, 'No value' );
Resultaat:
No Value