I MySQL er ISNULL()
funktion gør det muligt for os at kontrollere, om en værdi er null
eller ikke. Hvis den er null
, derefter 1
returneres, ellers 0
er returneret.
Syntaks
ISNULL(expr)
Eksempel
Her er et simpelt eksempel til at demonstrere:
SELECT ISNULL( null );
Resultat:
1
I dette tilfælde er udtrykket null
og så outputtet er 1
.
Her er det med en ikke-null
værdi:
SELECT ISNULL( 'Cake' );
Resultat:
0
Denne gang er resultatet 0
(fordi udtrykket ikke er null
).
Udtryk
ISNULL()
kontrollerer resultatet af ethvert udtryk. Så hvis vi for eksempel gør følgende:
SELECT ISNULL( 3 / 0 );
Vi får dette:
1
Så selvom vi ikke specificerede null
som argumentet er resultatet af udtrykket null
, og så ISNULL()
returnerer 1
.
Dette kan tydeligere demonstreres med det næste eksempel:
SELECT
3 / 0,
ISNULL( 3 / 0 );
Resultat:
+-------+-----------------+ | 3 / 0 | ISNULL( 3 / 0 ) | +-------+-----------------+ | NULL | 1 | +-------+-----------------+ 1 row in set, 2 warnings (0.00 sec)
I den første kolonne kan vi se, at selve beregningen resulterede i en nulværdi, og så den anden kolonne returnerede 1
.
Mens vi er i gang, er her advarslerne:
SHOW WARNINGS
Resultat:
+---------+------+---------------+ | Level | Code | Message | +---------+------+---------------+ | Warning | 1365 | Division by 0 | | Warning | 1365 | Division by 0 | +---------+------+---------------+
Vi er advaret om, at vi forsøgte at dividere med nul (hvilket resulterer i en nulværdi).
Databaseeksempel
Antag, at vi har en databasetabel som denne:
SELECT * FROM Pets;
Resultat:
+-------+-----------+---------+---------+------------+ | 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 | +-------+-----------+---------+---------+------------+
Her er en forespørgsel, der bruger ISNULL()
funktion mod denne tabel:
SELECT
PetId,
PetName,
ISNULL( DOB ) AS "DOB is Missing?"
FROM Pets;
Resultat:
+-------+---------+-----------------+ | 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 | +-------+---------+-----------------+
I så fald oprettede vi en kolonne, der viser 1
for alle kæledyr, der ikke har noget i deres DOB-kolonne.
Lad os sige, at vi ønsker at returnere alle kæledyr, der ikke har en fødselsdato på listen (dvs. deres DOB
feltet er null
). I dette tilfælde kan vi gøre følgende:
SELECT * FROM Pets
WHERE ISNULL(DOB) = 1;
Resultat:
+-------+-----------+---------+---------+------+ | PetId | PetTypeId | OwnerId | PetName | DOB | +-------+-----------+---------+---------+------+ | 7 | 3 | 2 | Bark | NULL | | 8 | 2 | 4 | Meow | NULL | +-------+-----------+---------+---------+------+
Det giver det samme resultat som at gøre følgende:
SELECT * FROM Pets
WHERE DOB IS NULL;
Resultat:
+-------+-----------+---------+---------+------+ | PetId | PetTypeId | OwnerId | PetName | DOB | +-------+-----------+---------+---------+------+ | 7 | 3 | 2 | Bark | NULL | | 8 | 2 | 4 | Meow | NULL | +-------+-----------+---------+---------+------+