In MySQL is de ISNULL()
functie stelt ons in staat om te controleren of een waarde null
. is of niet. Als het null
is , dan 1
wordt geretourneerd, anders 0
wordt geretourneerd.
Syntaxis
ISNULL(expr)
Voorbeeld
Hier is een eenvoudig voorbeeld om te demonstreren:
SELECT ISNULL( null );
Resultaat:
1
In dit geval is de uitdrukking null
en dus is de output 1
.
Hier is het met een niet-null
waarde:
SELECT ISNULL( 'Cake' );
Resultaat:
0
Deze keer is het resultaat 0
(omdat de uitdrukking niet null
is ).
Uitdrukkingen
ISNULL()
controleert het resultaat van elke uitdrukking. Dus als we bijvoorbeeld het volgende doen:
SELECT ISNULL( 3 / 0 );
We krijgen dit:
1
Dus hoewel we null
niet hebben gespecificeerd als het argument is het resultaat van de uitdrukking null
, en dus ISNULL()
retourneert 1
.
Dit kan duidelijker worden aangetoond met het volgende voorbeeld:
SELECT
3 / 0,
ISNULL( 3 / 0 );
Resultaat:
+-------+-----------------+ | 3 / 0 | ISNULL( 3 / 0 ) | +-------+-----------------+ | NULL | 1 | +-------+-----------------+ 1 row in set, 2 warnings (0.00 sec)
In de eerste kolom kunnen we zien dat de berekening zelf resulteerde in een null-waarde, en dus retourneerde de tweede kolom 1
.
Nu we toch bezig zijn, hier zijn de waarschuwingen:
SHOW WARNINGS
Resultaat:
+---------+------+---------------+ | Level | Code | Message | +---------+------+---------------+ | Warning | 1365 | Division by 0 | | Warning | 1365 | Division by 0 | +---------+------+---------------+
We zijn gewaarschuwd dat we hebben geprobeerd te delen door nul (wat resulteert in een null-waarde).
Databasevoorbeeld
Stel dat we een databasetabel hebben zoals deze:
SELECT * FROM Pets;
Resultaat:
+-------+-----------+---------+---------+------------+ | PetId | PetTypeId | OwnerId | PetName | DOB | +-------+-----------+---------+---------+------------+ | 1 | 2 | 3 | Fluffy | 2020-11-20 | | 2 | 3 | 3 | Fetch | 2019-08-16 | | 3 | 2 | 2 | Scratch | 2018-10-01 | | 4 | 3 | 3 | Wag | 2020-03-15 | | 5 | 1 | 1 | Tweet | 2020-11-28 | | 6 | 3 | 4 | Fluffy | 2020-09-17 | | 7 | 3 | 2 | Bark | NULL | | 8 | 2 | 4 | Meow | NULL | | 9 | 3 | 1 | Woof | 2020-10-03 | | 10 | 4 | 5 | Ears | 2022-01-11 | +-------+-----------+---------+---------+------------+
Hier is een query die de ISNULL()
. gebruikt functie tegen die tabel:
SELECT
PetId,
PetName,
ISNULL( DOB ) AS "DOB is Missing?"
FROM Pets;
Resultaat:
+-------+---------+-----------------+ | PetId | PetName | DOB is Missing? | +-------+---------+-----------------+ | 1 | Fluffy | 0 | | 2 | Fetch | 0 | | 3 | Scratch | 0 | | 4 | Wag | 0 | | 5 | Tweet | 0 | | 6 | Fluffy | 0 | | 7 | Bark | 1 | | 8 | Meow | 1 | | 9 | Woof | 0 | | 10 | Ears | 0 | +-------+---------+-----------------+
In dat geval hebben we een kolom gemaakt met 1
voor alle huisdieren die niets in hun DOB-kolom hebben.
Laten we zeggen dat we alle huisdieren willen terugsturen die geen geboortedatum hebben vermeld (d.w.z. hun DOB
veld is null
). In dit geval kunnen we het volgende doen:
SELECT * FROM Pets
WHERE ISNULL(DOB) = 1;
Resultaat:
+-------+-----------+---------+---------+------+ | PetId | PetTypeId | OwnerId | PetName | DOB | +-------+-----------+---------+---------+------+ | 7 | 3 | 2 | Bark | NULL | | 8 | 2 | 4 | Meow | NULL | +-------+-----------+---------+---------+------+
Dat levert hetzelfde resultaat op als het volgende doen:
SELECT * FROM Pets
WHERE DOB IS NULL;
Resultaat:
+-------+-----------+---------+---------+------+ | PetId | PetTypeId | OwnerId | PetName | DOB | +-------+-----------+---------+---------+------+ | 7 | 3 | 2 | Bark | NULL | | 8 | 2 | 4 | Meow | NULL | +-------+-----------+---------+---------+------+