JavaRush /Курси /SQL SELF /Перевірка значень NULL: IS NULL та IS NOT NULL

Перевірка значень NULL: IS NULL та IS NOT NULL

SQL SELF
Рівень 9 , Лекція 1
Відкрита

Сьогодні ми продовжимо вивчати роботу з NULL — невидимим героєм баз даних. Якщо ти досі думаєш, що NULL — це просто "нічого", то ти правий, але не зовсім. У цій лекції ми навчимося перевіряти, чи є в наших даних NULL, і що з цим робити. Ну що, готовий вистежувати відсутність значень?

Давай почнемо з простого — уяви, що ти працюєш з базою даних інтернет-магазину. У тебе є таблиця замовлень, де для деяких замовлень інформацію про коментарі не додали, а в інших — вказали примітки. Якщо ти захочеш знайти всі замовлення з порожніми примітками, але застосуєш звичайні порівняння =, <>, ти здивуєшся... Чому? Бо NULL — це особливий випадок!

У SQL перевірки на наявність або відсутність NULL виконуються за допомогою IS NULL та IS NOT NULL. Ці оператори допомагають нам розібратися з NULL і отримати потрібні дані.

Перевірка значень з IS NULL

IS NULL використовується для перевірки, чи містить стовпець або вираз значення NULL.

SELECT *
FROM orders
WHERE comment IS NULL;

Цей запит поверне всі рядки, де значення у стовпці comment дорівнює NULL. Це зручно, якщо ти хочеш знайти замовлення, де відсутні примітки.

Ось приклад таблиці orders:

id customer_name total_amount comment
1 Otto Art 1500 "Термінова доставка"
2 Maria Chi 3000 NULL
3 Alex Lin 2000 ''
4 Anna Song 5000 NULL

Запит:

SELECT id, customer_name
FROM orders
WHERE comment IS NULL;

Результат:

id customer_name
2 Maria Chi
4 Anna Song

Зверни увагу, що рядки з порожнім рядком '' сюди не включені, бо '' — це не NULL.

Перевірка значень з IS NOT NULL

IS NOT NULL працює у протилежному напрямку; він перевіряє, чи значення не NULL. Наприклад, якщо ти хочеш отримати всі замовлення з вказаними коментарями:

SELECT *
FROM orders
WHERE comment IS NOT NULL;

Цей запит поверне тільки рядки, де у стовпці comment є дані (включаючи порожні рядки '').

Приклад

Таблиця orders залишається такою ж.

id customer_name total_amount comment
1 Otto Art 1500 "Термінова доставка"
2 Maria Chi 3000 NULL
3 Alex Lin 2000 ''
4 Anna Song 5000 NULL

Виконаємо запит:

SELECT id, customer_name, comment
FROM orders
WHERE comment IS NOT NULL;

Результат:

id customer_name comment
1 Otto Art "Термінова доставка"
3 Alex Lin ''

Зверни увагу, що рядок з порожнім рядком '' включений. SQL вважає це значення "непорожнім".

Коли використовувати IS NULL та IS NOT NULL?

Ось кілька сценаріїв:

  1. Фільтрація даних: ти хочеш виключити неповні записи, де значення відсутні.
  2. Обробка помилок: іноді NULL може означати помилку введення даних, і тобі потрібно ізолювати такі рядки.
  3. Аналіз даних: підрахунок кількості записів з відсутніми значеннями допомагає зрозуміти якість даних.

Практичне застосування

Спробуємо кілька практичних задач:

Задача 1: Вибір студентів без вказаної дати народження

Припустимо, у тебе є таблиця students:

id name birth_date
1 Otto Art 2000-05-10
2 Maria Chi NULL
3 Alex Lin 1998-12-30
4 Anna Song NULL

Запит:

SELECT name
FROM students
WHERE birth_date IS NULL;

Результат:

name
Maria Chi
Anna Song

Цей запит корисний для пошуку студентів, у яких треба уточнити дату народження.

Задача 2: Вибір замовлень з коментарями

id customer_name total_amount comment
1 Otto Art 1500 "Термінова доставка"
2 Maria Chi 3000 NULL
3 Alex Lin 2000 ''
4 Anna Song 5000 NULL

Для таблиці orders ми можемо знайти замовлення з заповненими коментарями:

SELECT customer_name, comment
FROM orders
WHERE comment IS NOT NULL;

Результат:

customer_name comment
Otto Art "Термінова доставка"
Alex Lin ''

Порівняння зі звичайними операторами

Тепер давай зробимо крок убік і спробуємо виконати "помилковий" запит для перевірки NULL:

SELECT *
FROM orders
WHERE comment = NULL;

Здивований? Запит не поверне жодного рядка, навіть тих, де comment явно містить NULL. Це тому, що NULL не можна порівнювати за допомогою стандартних операторів. Для таких порівнянь ми зобов'язані використовувати IS NULL.

Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ