MySQL IS NULL & IS NOT NULL с примери
⚡ Умно обобщение
MySQL IS NULL и IS NOT NULL са ключови думи за сравнение, които проверяват дали дадена колона съдържа липсваща стойност. NULL маркира липсващи данни, държи се различно от нула или празен низ и изисква специални оператори за надеждно филтриране.

В SQL, NULL е едновременно стойност и ключова дума. Нека първо разгледаме NULL стойността.
Какво е NULL в MySQL?
С прости думи, NULL е заместител за данни, които не съществуватПри извършване на операции за вмъкване в таблици, ще има моменти, в които някои стойности на полетата не са налични.
За да отговорим на изискванията на истинските системи за управление на релационни бази данни, MySQL използва NULL като заместител за стойностите, които не са били подадени. Екранната снимка по-долу показва как изглеждат NULL стойностите в таблица на база данни.
Обърнете внимание, че празните клетки са маркирани с NULL, а не с празен текст и не с нула. Преди да продължим, разгледайте някои от основите на NULL.
- NULL не е тип данни – това означава, че не се разпознава като „int“, „date“ или друг дефиниран тип данни.
- Аритметични операции включващи NULL винаги върне NULL, например, 69 + NULL = NULL.
- мост агрегатни функции игнорирай редове, които съдържат NULL стойностиЕдинственото изключение е COUNT(*), която брои всеки ред, независимо от NULL.
Как агрегатните функции третират NULL
Това правило променя отговорите, които заявките за отчитане връщат, така че нека го докажем. Започнете с текущото съдържание на таблицата members.
SELECT * FROM `members`;
Изпълнението на горния скрипт ни дава следните резултати.
| membership_ number | full_ names | gender | date_of_ birth | physical_ address | postal_ address | contact_ number | |
|---|---|---|---|---|---|---|---|
| 1 | Janet Jones | Female | 21-07-1980 | First Street Plot No 4 | Private Bag | 0759 253 542 | janetjones@yagoo.cm |
| 2 | Janet Smith Jones | Female | 23-06-1980 | Melrose 123 | NULL | NULL | jj@fstreet.com |
| 3 | Robert Phil | Male | 12-07-1989 | 3rd Street 34 | NULL | 12345 | rm@tstreet.com |
| 4 | Gloria Williams | Female | 14-02-1984 | 2nd Street 23 | NULL | NULL | NULL |
| 5 | Leonard Hofstadter | Male | NULL | Woodcrest | NULL | 845738767 | NULL |
| 6 | Sheldon Cooper | Male | NULL | Woodcrest | NULL | 976736763 | NULL |
| 7 | Rajesh Koothrappali | Male | NULL | Woodcrest | NULL | 938867763 | NULL |
| 8 | Leslie Winkle | Male | 14-02-1984 | Woodcrest | NULL | 987636553 | NULL |
| 9 | Howard Wolowitz | Male | 24-08-1981 | SouthPark | P.O. Box 4563 | 987786553 | lwolowitz[at]email.me |
Маркираната колона contact_number съдържа общо девет реда, но два от тях са NULL. Нека преброим всички членове, които са актуализирали номера си за контакт.
SELECT COUNT(contact_number) FROM `members`;
Изпълнението на горната заявка ни дава следните резултати.
| COUNT(contact_number) |
|---|
| 7 |
Забележка: Отговорът е 7, а не 9, защото двете NULL стойности не са включени. Изпълнението на COUNT(*) върху същата таблица би върнало 9, тъй като COUNT(*) брои редове, а не стойности.
Стойности NOT NULL
По-безопасен подход е да се спре NULL въобще да влиза в задължителните колони. Това е задачата на ограничението NOT NULL.
Какво е НЕ OperaТор?
Логическият оператор NOT се използва за проверка на булеви условия и връща true, ако условието е невярно. Операторът NOT връща false, ако тестваното условие е вярно.
| състояние | НЕ Operator Резултат |
|---|---|
| Вярно | Фалшив |
| Фалшив | Вярно |
Защо да използваме NOT NULL?
Ще има случаи, в които ще трябва да извършим изчисления върху набор от резултати от заявка и да върнем стойностите. Извършването на всяка аритметична операция върху колона, която съдържа NULL стойност, връща NULL резултат. За да избегнем подобни ситуации, можем да използваме клаузата NOT NULL, за да ограничим резултатите, върху които оперираме с данните си.
Създаване на таблица с колона NOT NULL
Да предположим, че искаме да създадем таблица с определени полета, които винаги трябва да бъдат снабдени със стойности при вмъкване на нови редове. Можем да използваме клаузата NOT NULL за дадено поле при създаването на таблицата.
Показаният по-долу пример създава нова таблица, която съдържа данни за служителите. Номерът на служителя винаги трябва да бъде предоставен.
CREATE TABLE `employees`( employee_number int NOT NULL, full_names varchar(255) , gender varchar(6) );
Нека сега опитаме да вмъкнем нов запис, без да посочваме номера на служителя, и да видим какво ще се случи.
INSERT INTO `employees` (full_names,gender) VALUES ('Steve Jobs', 'Male');
Изпълнение на горния скрипт в MySQL Workbench дава следната грешка, защото задължителната колона е пропусната.
Ключови думи IS NULL и IS NOT NULL
Ограничението блокира нови NULL стойности. За работа с вече съществуващи NULL стойности, NULL се използва като ключова дума. Синтаксисът е следният.
column_name IS NULL column_name IS NOT NULL
ТУК
- „Е НУЛЕВ“ е ключовата дума, която извършва булевото сравнение. Връща true, ако предоставената стойност е NULL и false, ако предоставената стойност не е NULL.
- „НЕ Е НУЛА“ е ключовата дума, която извършва обратното сравнение. Връща true, ако предоставената стойност не е NULL, и false, ако предоставената стойност е NULL.
Нека разгледаме практически пример, който използва ключовата дума IS NOT NULL, за да елиминира всички редове, съдържащи NULL стойности в колона.
Продължавайки с таблицата с членове по-горе, да предположим, че ни трябват данните на членовете, чийто телефонен номер не е NULL. Можем да изпълним заявка като тази.
SELECT * FROM `members` WHERE contact_number IS NOT NULL;
Изпълнението на горната заявка връща само седемте записа, в които е наличен телефонният номер за контакт, което съответства на резултата COUNT от предишния раздел.
Сега да предположим, че искаме обратното: записи на членове, където липсва телефонният номер за контакт. Можем да използваме следната заявка.
SELECT * FROM `members` WHERE contact_number IS NULL;
Изпълнението на горната заявка дава двата записа на членове, чийто телефонен номер е NULL.
| membership_ number | full_names | gender | date_of_birth | physical_address | postal_address | contact_ number | |
|---|---|---|---|---|---|---|---|
| 2 | Janet Smith Jones | Female | 23-06-1980 | Melrose 123 | NULL | NULL | jj@fstreet.com |
| 4 | Gloria Williams | Female | 14-02-1984 | 2nd Street 23 | NULL | NULL | NULL |
Внимание: Условие като WHERE contact_number = NULL връща празен набор от резултати, въпреки че съществуват NULL стойности. Операторът за равенство никога не може да съвпадне с NULL, така че IS NULL е единственият правилен тест.
Сравняване на NULL стойности с тризначна логика
Тризначна логика – извършването на булеви операции върху условия, които включват NULL, може да върне „Неизвестно“, „Вярно“ или „Невярно“.
Използване на ключовата дума „IS NULL“ когато извършвате сравнителни операции включващ NULL Постъпления вярно or фалшивИзползването на другите оператори за сравнение връща „Неизвестен“ (НУЛА)Таблицата по-долу сравнява всеки израз един до друг.
| Изразяване | Резултат | Значение |
|---|---|---|
| ИЗБЕРИ 5 = 5; | 1 | TRUE |
| ИЗБЕРИ NULL = NULL; | NULL | UNKNOWN |
| ИЗБЕРИ 5 > 5; | 0 | FALSE |
| ИЗБЕРЕТЕ NULL > NULL; | NULL | UNKNOWN |
| ИЗБЕРЕТЕ 5 Е NULL; | 0 | FALSE |
| ИЗБЕРЕТЕ NULL Е NULL; | 1 | TRUE |
Сравнете числото пет със самото себе си, след което повторете операцията с NULL.
SELECT 5 =5; SELECT NULL = NULL;
| 5 =5 | NULL = NULL |
|---|---|
| 1 | NULL |
Първият резултат е 1 (TRUE). Вторият е NULL, защото MySQL Не може да се твърди, че една неизвестна стойност е равна на друга неизвестна стойност. Сега използвайте ключовата дума IS NULL за същите стойности.
SELECT 5 IS NULL; SELECT NULL IS NULL;
| 5 IS NULL | NULL IS NULL |
|---|---|
| 0 | 1 |
Този път отговорите са категорични: 0 (FALSE) и 1 (TRUE). Само ключовите думи IS NULL и IS NOT NULL връщат категоричен отговор, когато е замесен NULL.


