Van MariaDB 10.3, NVL()
kan worden gebruikt als een alias voor de IFNULL()
functie. Daarom stellen beide functies ons in staat om NULL-waarden te vervangen door een andere waarde.
Syntaxis
NVL(expr1,expr2)
Als expr1
is niet NULL
, NVL()
retourneert expr1
; anders retourneert het expr2
.
Gegeven NVL()
is een alias voor IFNULL()
, kunnen we ook de volgende syntaxis gebruiken:
IFNULL(expr1,expr2)
Beide bovenstaande syntaxis geven hetzelfde resultaat.
Voorbeeld
Hier is een eenvoudig voorbeeld dat de NULL
. gebruikt constante:
SELECT NVL( null, 'No Value' );
Resultaat:
No Value
In dit geval gebruikte ik NVL()
om de NULL-waarde te vervangen door No Value
.
Dit is wat er gebeurt als het eerste argument niet NULL
is :
SELECT NVL( 'Spicy', 'No Value' );
Resultaat:
Green
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 NVL()
om de NULL-waarden te vervangen door een meer betekenisvolle waarde voor de lezer:
SELECT
empId,
name,
NVL( 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 NVL( 4 * 10, 0 );
We krijgen dit:
40
We krijgen dus niet de 4 * 10
deel. We krijgen het resultaat van die uitdrukking (in dit geval 40
).
Hetzelfde geldt wanneer het resultaat van de expressie NULL
. is :
SELECT NVL( 4 / 0, 0 );
Resultaat:
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.
In dergelijke gevallen is het meestal beter om een betekenisvollere waarde te gebruiken die de lezer duidelijk maakt dat er geen waarde is.
Voorbeeld:
SELECT NVL( 4 / 0, 'No value' );
Resultaat:
No Value
De IFNULL()
Functie
Zoals vermeld, NVL()
is een alias voor IFNULL()
. Daarom kunnen we NVL()
. vervangen met IFNULL()
in een van de bovenstaande voorbeelden.
Voorbeeld:
SELECT IFNULL( 4 / 0, 'No value' );
Resultaat:
No Value