В MySQL, ISNULL()
функцията ни позволява да проверим дали дадена стойност е null
или не. Ако е null
, след това 1
се връща, в противен случай 0
се връща.
Синтаксис
ISNULL(expr)
Пример
Ето един прост пример за демонстрация:
SELECT ISNULL( null );
Резултат:
1
В този случай изразът е null
и така изходът е 1
.
Ето го с не-null
стойност:
SELECT ISNULL( 'Cake' );
Резултат:
0
Този път резултатът е 0
(тъй като изразът не е null
).
Изрази
ISNULL()
проверява резултата от всеки израз. Така че, ако направим следното, например:
SELECT ISNULL( 3 / 0 );
Получаваме това:
1
Така че въпреки че не посочихме null
като аргумент, резултатът от израза е null
, и така ISNULL()
връща 1
.
Това може да се демонстрира по-ясно със следващия пример:
SELECT
3 / 0,
ISNULL( 3 / 0 );
Резултат:
+-------+-----------------+ | 3 / 0 | ISNULL( 3 / 0 ) | +-------+-----------------+ | NULL | 1 | +-------+-----------------+ 1 row in set, 2 warnings (0.00 sec)
В първата колона можем да видим, че самото изчисление е довело до нулева стойност и така втората колона върна 1
.
Докато сме на това, ето предупрежденията:
SHOW WARNINGS
Резултат:
+---------+------+---------------+ | Level | Code | Message | +---------+------+---------------+ | Warning | 1365 | Division by 0 | | Warning | 1365 | Division by 0 | +---------+------+---------------+
Предупредени сме, че се опитахме да разделим на нула (което води до нулева стойност).
Пример за база данни
Да предположим, че имаме таблица с база данни като тази:
SELECT * FROM Pets;
Резултат:
+-------+-----------+---------+---------+------------+ | 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 | +-------+-----------+---------+---------+------------+
Ето заявка, която използва ISNULL()
функция спрямо тази таблица:
SELECT
PetId,
PetName,
ISNULL( DOB ) AS "DOB is Missing?"
FROM Pets;
Резултат:
+-------+---------+-----------------+ | 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 | +-------+---------+-----------------+
В този случай създадохме колона, която показва 1
за всички домашни любимци, които нямат нищо в колоната си DOB.
Да приемем, че искаме да върнем всички домашни любимци, които нямат посочена дата на раждане (т.е. техния DOB
полето е null
). В този случай можем да направим следното:
SELECT * FROM Pets
WHERE ISNULL(DOB) = 1;
Резултат:
+-------+-----------+---------+---------+------+ | PetId | PetTypeId | OwnerId | PetName | DOB | +-------+-----------+---------+---------+------+ | 7 | 3 | 2 | Bark | NULL | | 8 | 2 | 4 | Meow | NULL | +-------+-----------+---------+---------+------+
Това дава същия резултат като извършването на следното:
SELECT * FROM Pets
WHERE DOB IS NULL;
Резултат:
+-------+-----------+---------+---------+------+ | PetId | PetTypeId | OwnerId | PetName | DOB | +-------+-----------+---------+---------+------+ | 7 | 3 | 2 | Bark | NULL | | 8 | 2 | 4 | Meow | NULL | +-------+-----------+---------+---------+------+