MySQL IS NULL та IS NOT NULL з прикладами

⚡ Розумний підсумок

MySQL IS NULL та IS NOT NULL – це ключові слова порівняння, які перевіряють, чи містить стовпець відсутнє значення. NULL позначає відсутні дані, поводиться інакше, ніж нуль або пустий рядок, і вимагає спеціальних операторів для надійної фільтрації.

  • 🧩 Основне визначення: NULL — це заповнювач для даних, яких не існує. Це не тип даних і не число нуль.
  • Арифметична поведінка: Будь-який арифметичний вираз, що містить NULL, повертає NULL, тому 69 + NULL повертає NULL, а не 69.
  • 📊 Сукупний вплив: COUNT(column) та інші агрегатні функції пропускають рядки з значенням NULL, тоді як COUNT(*) все одно підраховує кожен рядок у таблиці.
  • 🚫 Обмеження NOT NULL: Оголошення стовпця як NOT NULL відхиляє будь-яку вставку, яка пропускає значення, що захищає обов'язкові поля, такі як ідентифікатори.
  • 🔍 Правильна фільтрація: IS NULL та IS NOT NULL – єдині надійні тести, оскільки оператор рівності ніколи не збігається зі значенням NULL.
  • 🇧🇷 Тризначна логіка: Порівняння з NULL повертає UNKNOWN, тому SELECT NULL = NULL повертає NULL замість TRUE.

MySQL Є NULL та НЕ Є NULL

У SQL NULL є одночасно значенням і ключовим словом. Давайте спочатку розглянемо значення NULL.

MySQL Є NULL & НЕ Є NULL

Що таке 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, якщо умова, що перевіряється, істинна.

стан $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 Верстак видає таку помилку, оскільки обов'язковий стовпець був пропущений.

Значення 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 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.

Поширені запитання

Нуль – це число, а порожній рядок – текст, тому обидва значення відповідають перевіркам рівності. NULL означає, що значення взагалі не було надано, тому він реагує лише на IS NULL та IS NOT NULL.

IFNULL(стовпець, 'Н/Д') повертає замінник щоразу, коли стовпець має значення NULL. COALESCE(a, b, c) повертає перший аргумент, який не має значення NULL. Обидва корисні всередині MySQL Функції та звіти.

Ні. MySQL автоматично застосовує NOT NULL до кожного стовпця первинного ключа, оскільки ключ, який ідентифікує рядок, не може бути відсутнім. Індекс UNIQUE відрізняється і дозволяє кілька значень NULL.

Зазвичай, так. Помічники штучного інтелекту всередині таких інструментів, як MySQL Верстак перетворити «учасників без номера телефону» на речення WHERE стовпець IS NULL. Revпереглянути фільтр, оскільки перевірка на рівність з NULL мовчки нічого не повертає.

Часто так. Інструменти перевірки ШІ позначають такі помилки, як = NULL порівняння, a ВИБІР що усереднює стовпець, що містить NULL, та списки NOT IN, що містять NULL. Остаточне рішення належить особі, яка знає дані.

Підсумуйте цей пост за допомогою: