I MySQL, ISNULL() funktionen gör det möjligt för oss att kontrollera om ett värde är null eller inte. Om det är null , sedan 1 returneras, annars 0 returneras.
Syntax
ISNULL(expr) Exempel
Här är ett enkelt exempel att visa:
SELECT ISNULL( null ); Resultat:
1
I det här fallet är uttrycket null och så utdata är 1 .
Här är det med en icke-null värde:
SELECT ISNULL( 'Cake' ); Resultat:
0
Den här gången är resultatet 0 (eftersom uttrycket inte är null ).
Uttryck
ISNULL() kontrollerar resultatet av alla uttryck. Så om vi gör följande, till exempel:
SELECT ISNULL( 3 / 0 ); Vi får det här:
1
Så även om vi inte angav null som argument är resultatet av uttrycket null , och så ISNULL() returnerar 1 .
Detta kan demonstreras tydligare med nästa exempel:
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örsta kolumnen kan vi se att själva beräkningen resulterade i ett nollvärde, så den andra kolumnen returnerade 1 .
Medan vi håller på, här är varningarna:
SHOW WARNINGS Resultat:
+---------+------+---------------+ | Level | Code | Message | +---------+------+---------------+ | Warning | 1365 | Division by 0 | | Warning | 1365 | Division by 0 | +---------+------+---------------+
Vi varnas för att vi försökte dividera med noll (vilket resulterar i ett nollvärde).
Databasexempel
Anta att vi har en databastabell så här:
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 | +-------+-----------+---------+---------+------------+
Här är en fråga som använder ISNULL() funktion mot den tabellen:
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å fall skapade vi en kolumn som visar 1 för alla husdjur som inte har något i sin DOB-kolumn.
Låt oss säga att vi vill lämna tillbaka alla husdjur som inte har ett födelsedatum (dvs. deras DOB) fältet är null ). I det här fallet kan vi göra följande:
SELECT * FROM Pets
WHERE ISNULL(DOB) = 1; Resultat:
+-------+-----------+---------+---------+------+ | PetId | PetTypeId | OwnerId | PetName | DOB | +-------+-----------+---------+---------+------+ | 7 | 3 | 2 | Bark | NULL | | 8 | 2 | 4 | Meow | NULL | +-------+-----------+---------+---------+------+
Det ger samma resultat som att göra följande:
SELECT * FROM Pets
WHERE DOB IS NULL; Resultat:
+-------+-----------+---------+---------+------+ | PetId | PetTypeId | OwnerId | PetName | DOB | +-------+-----------+---------+---------+------+ | 7 | 3 | 2 | Bark | NULL | | 8 | 2 | 4 | Meow | NULL | +-------+-----------+---------+---------+------+