MySQL IS NULL & IS NOT NULL с примери

⚡ Умно обобщение

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

  • 🧩 Основна дефиниция: NULL е заместител за данни, които не съществуват. Не е тип данни и не е числото нула.
  • Аритметично поведение: Всеки аритметичен израз, който съдържа NULL, връща NULL, така че 69 + NULL се оценява като NULL, а не като 69.
  • 📊 Агрегирано въздействие: COUNT(колона) и други агрегатни функции пропускат NULL редове, докато COUNT(*) все още брои всеки ред в таблицата.
  • 🚫 Ограничение NOT NULL: Декларирането на колона като NOT NULL отхвърля всяко вмъкване, което пропуска стойност, което защитава задължителните полета, като например идентификатори.
  • 🔍 Правилно филтриране: IS NULL и IS NOT NULL са единствените надеждни тестове, защото операторът за равенство никога не съвпада с NULL стойност.
  • Тризначна логика: Сравненията с NULL връщат UNKNOWN, така че SELECT NULL = NULL дава NULL вместо TRUE.

MySQL Е НУЛА и НЕ Е НУЛА

В SQL, NULL е едновременно стойност и ключова дума. Нека първо разгледаме NULL стойността.

MySQL Е НУЛЕВ И НЕ Е НУЛЕВ

Какво е NULL в MySQL?

С прости думи, NULL е заместител за данни, които не съществуватПри извършване на операции за вмъкване в таблици, ще има моменти, в които някои стойности на полетата не са налични.

За да отговорим на изискванията на истинските системи за управление на релационни бази данни, MySQL използва NULL като заместител за стойностите, които не са били подадени. Екранната снимка по-долу показва как изглеждат 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 email
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 12345rm@tstreet.com
4 Gloria Williams Female 14-02-1984 2nd Street 23 NULL NULL NULL
5 Leonard Hofstadter MaleNULL 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 дава следната грешка, защото задължителната колона е пропусната.

Стойности NOT NULL

Ключови думи 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 email
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.

Въпроси и Отговори

Нулата е число, а празният низ е текст, така че и двете съответстват на тестове за равенство. NULL означава, че изобщо не е предоставена стойност, поради което отговаря само на IS NULL и IS NOT NULL.

IFNULL(колона, 'N/A') връща заместителя, когато колоната е NULL. COALESCE(a, b, c) връща първия аргумент, който не е NULL. И двата са полезни вътре MySQL функции и доклади.

Не. MySQL прилага NOT NULL автоматично към всяка колона с първичен ключ, защото ключ, който идентифицира ред, не може да липсва. UNIQUE индексът е различен и позволява множество NULL стойности.

Обикновено, да. Асистенти с изкуствен интелект в инструменти като MySQL Workbench Превърнете „членове без телефонен номер“ в клауза WHERE IS NULL. Revвижте филтъра, защото проверката за равенство с NULL тихо не връща нищо.

Често, да. Инструментите за преглед с изкуствен интелект сигнализират за грешки като например = NULL сравнения, a МАРКИРАЙ което осреднява колона, съдържаща NULL, и NOT IN списъци, съдържащи NULL. Крайната преценка принадлежи на човека, който познава данните.

Обобщете тази публикация с: