W MySQL funkcja ISNULL()
funkcja umożliwia nam sprawdzenie, czy wartość jest null
albo nie. Jeśli jest null
, a następnie 1
jest zwracany, w przeciwnym razie 0
jest zwracany.
Składnia
ISNULL(expr)
Przykład
Oto prosty przykład do zademonstrowania:
SELECT ISNULL( null );
Wynik:
1
W tym przypadku wyrażenie to null
więc wynik to 1
.
Tutaj jest z wartością inną niż null
wartość:
SELECT ISNULL( 'Cake' );
Wynik:
0
Tym razem wynik to 0
(ponieważ wyrażenie nie jest null
).
Wyrażenia
ISNULL()
sprawdza wynik dowolnego wyrażenia. Jeśli więc wykonamy następujące czynności, na przykład:
SELECT ISNULL( 3 / 0 );
Otrzymujemy to:
1
Więc chociaż nie określiliśmy null
jako argument wynik wyrażenia to null
, a więc ISNULL()
zwraca 1
.
Można to wyraźniej zademonstrować na następnym przykładzie:
SELECT
3 / 0,
ISNULL( 3 / 0 );
Wynik:
+-------+-----------------+ | 3 / 0 | ISNULL( 3 / 0 ) | +-------+-----------------+ | NULL | 1 | +-------+-----------------+ 1 row in set, 2 warnings (0.00 sec)
W pierwszej kolumnie widzimy, że samo obliczenie dało wartość null, więc druga kolumna zwróciła 1
.
Skoro już przy tym jesteśmy, oto ostrzeżenia:
SHOW WARNINGS
Wynik:
+---------+------+---------------+ | Level | Code | Message | +---------+------+---------------+ | Warning | 1365 | Division by 0 | | Warning | 1365 | Division by 0 | +---------+------+---------------+
Ostrzegamy, że próbowaliśmy dzielić przez zero (co daje wartość pustą).
Przykład bazy danych
Załóżmy, że mamy taką tabelę bazy danych:
SELECT * FROM Pets;
Wynik:
+-------+-----------+---------+---------+------------+ | 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 | +-------+-----------+---------+---------+------------+
Oto zapytanie, które używa ISNULL()
funkcja względem tej tabeli:
SELECT
PetId,
PetName,
ISNULL( DOB ) AS "DOB is Missing?"
FROM Pets;
Wynik:
+-------+---------+-----------------+ | 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 | +-------+---------+-----------------+
W takim przypadku utworzyliśmy kolumnę wyświetlającą 1
dla wszystkich zwierząt, które nie mają nic w swojej kolumnie DOB.
Załóżmy, że chcemy zwrócić wszystkie zwierzęta, które nie mają podanej daty urodzenia (tj. ich DOB
pole jest null
). W takim przypadku możemy wykonać następujące czynności:
SELECT * FROM Pets
WHERE ISNULL(DOB) = 1;
Wynik:
+-------+-----------+---------+---------+------+ | PetId | PetTypeId | OwnerId | PetName | DOB | +-------+-----------+---------+---------+------+ | 7 | 3 | 2 | Bark | NULL | | 8 | 2 | 4 | Meow | NULL | +-------+-----------+---------+---------+------+
Daje to taki sam wynik, jak wykonanie następujących czynności:
SELECT * FROM Pets
WHERE DOB IS NULL;
Wynik:
+-------+-----------+---------+---------+------+ | PetId | PetTypeId | OwnerId | PetName | DOB | +-------+-----------+---------+---------+------+ | 7 | 3 | 2 | Bark | NULL | | 8 | 2 | 4 | Meow | NULL | +-------+-----------+---------+---------+------+