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.

2
Задача
SQL SELF, 9 уровень, 1 лекция
Недоступна
Поиск записей с отсутствующим значением
Поиск записей с отсутствующим значением
2
Задача
SQL SELF, 9 уровень, 1 лекция
Недоступна
Фильтрация по доступным данным
Фильтрация по доступным данным
Комментарии (1)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Anemon Уровень 13 Expert
21 августа 2025
🤓