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, якщо умова, що перевіряється, істинна.
| стан | $NOT 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 Верстак видає таку помилку, оскільки обов'язковий стовпець був пропущений.
Ключові слова 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 falseВикористання інших операторів порівняння повертає «Невідомо» (NULL)У таблиці нижче порівнюються всі вирази пліч-о-пліч.
| вираз | Результат | Сенс |
|---|---|---|
| ВИБРАТИ 5 = 5; | 1 | ІСТИНА |
| ВИБРАТИ NULL = NULL; | NULL | НЕВІДОМИЙ |
| ВИБЕРІТЬ 5 > 5; | 0 | ПОМИЛКОВИЙ |
| ВИБРАТИ NULL > NULL; | NULL | НЕВІДОМИЙ |
| ВИБРАТИ 5 РІВЕНЬ NULL; | 0 | ПОМИЛКОВИЙ |
| ВИБРАТИ NULL РІВНЕ NULL; | 1 | ІСТИНА |
Порівняйте число п'ять із самим собою, потім повторіть операцію з 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 (ХИБНІСТЬ) та 1 (ІСТИНА). Тільки ключові слова IS NULL та IS NOT NULL повертають однозначну відповідь, коли задіяно NULL.


