V MySQL je to ISNULL()
Funkce nám umožňuje zkontrolovat, zda je hodnota null
nebo ne. Pokud je null
a poté 1
je vráceno, jinak 0
je vráceno.
Syntaxe
ISNULL(expr)
Příklad
Zde je jednoduchý příklad k demonstraci:
SELECT ISNULL( null );
Výsledek:
1
V tomto případě je výraz null
a tak výstup je 1
.
Tady je to s nenull
hodnota:
SELECT ISNULL( 'Cake' );
Výsledek:
0
Tentokrát je výsledek 0
(protože výraz není null
).
Výrazy
ISNULL()
kontroluje výsledek libovolného výrazu. Pokud tedy uděláme například následující:
SELECT ISNULL( 3 / 0 );
Dostáváme toto:
1
Takže ačkoli jsme nezadali null
jako argument je výsledkem výrazu null
, a tak ISNULL()
vrátí 1
.
To lze názorněji demonstrovat na následujícím příkladu:
SELECT
3 / 0,
ISNULL( 3 / 0 );
Výsledek:
+-------+-----------------+ | 3 / 0 | ISNULL( 3 / 0 ) | +-------+-----------------+ | NULL | 1 | +-------+-----------------+ 1 row in set, 2 warnings (0.00 sec)
V prvním sloupci vidíme, že samotný výpočet vyústil v nulovou hodnotu, a tak druhý sloupec vrátil 1
.
Když už jsme u toho, zde jsou varování:
SHOW WARNINGS
Výsledek:
+---------+------+---------------+ | Level | Code | Message | +---------+------+---------------+ | Warning | 1365 | Division by 0 | | Warning | 1365 | Division by 0 | +---------+------+---------------+
Byli jsme upozorněni, že jsme se pokusili dělit nulou (což má za následek nulovou hodnotu).
Příklad databáze
Předpokládejme, že máme tabulku databáze jako je tato:
SELECT * FROM Pets;
Výsledek:
+-------+-----------+---------+---------+------------+ | 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 | +-------+-----------+---------+---------+------------+
Zde je dotaz, který používá ISNULL()
funkce proti této tabulce:
SELECT
PetId,
PetName,
ISNULL( DOB ) AS "DOB is Missing?"
FROM Pets;
Výsledek:
+-------+---------+-----------------+ | 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 | +-------+---------+-----------------+
V takovém případě jsme vytvořili sloupec, který zobrazuje 1
pro všechna domácí zvířata, která nemají ve sloupci DOB nic.
Řekněme, že chceme vrátit všechna domácí zvířata, která nemají uvedené datum narození (tj. jejich DOB
pole je null
). V tomto případě můžeme provést následující:
SELECT * FROM Pets
WHERE ISNULL(DOB) = 1;
Výsledek:
+-------+-----------+---------+---------+------+ | PetId | PetTypeId | OwnerId | PetName | DOB | +-------+-----------+---------+---------+------+ | 7 | 3 | 2 | Bark | NULL | | 8 | 2 | 4 | Meow | NULL | +-------+-----------+---------+---------+------+
Výsledkem je stejný výsledek jako následující postup:
SELECT * FROM Pets
WHERE DOB IS NULL;
Výsledek:
+-------+-----------+---------+---------+------+ | PetId | PetTypeId | OwnerId | PetName | DOB | +-------+-----------+---------+---------+------+ | 7 | 3 | 2 | Bark | NULL | | 8 | 2 | 4 | Meow | NULL | +-------+-----------+---------+---------+------+