Использование NULL в условиях
В SQL работа с NULL
имеет свои особенности, поскольку NULL
обозначает отсутствие значения или неизвестность. Это требует специальных подходов при составлении условий и фильтрации данных. Обычные операторы сравнения, такие как =
, <
, >
, не работают с NULL
так, как с обычными значениями. Вместо этого SQL предоставляет специальные операторы и функции для работы с NULL
.
Проверка на NULL
NULL
Оператор IS NULL
IS NULL
Для проверки, является ли значение NULL
, используется оператор IS NULL
.
Этот запрос находит сотрудников, у которых нет менеджера (т.е., manager_id
равно NULL
).
Оператор IS NOT NULL
IS NOT NULL
Для проверки, что значение не является NULL
, используется оператор IS NOT NULL
.
Этот запрос находит сотрудников, у которых есть менеджер.
Работа с NULL
в условиях
NULL
в условияхИспользование функции COALESCE
COALESCE
Функция COALESCE
возвращает первый ненулевой аргумент из списка.
Этот запрос возвращает идентификатор менеджера, если он существует, или строку 'No Manager'
, если manager_id
равно NULL
.
Использование функции NULLIF
NULLIF
Функция NULLIF
возвращает NULL
, если два аргумента равны. В противном случае возвращает первый аргумент.
Этот запрос возвращает NULL
для бонусов, равных 0, иначе возвращает значение бонуса.
Сравнение с NULL
NULL
= NULL
и <> NULL
= NULL
и <> NULL
Прямое использование операторов сравнения с NULL
не дает ожидаемых результатов. В SQL NULL = NULL
всегда возвращает FALSE
, так как NULL
не равен никакому значению, включая другое NULL
.
IS DISTINCT FROM
(в некоторых СУБД)
IS DISTINCT FROM
(в некоторых СУБД)Некоторые СУБД, такие как PostgreSQL, поддерживают оператор IS DISTINCT FROM
, который учитывает NULL
.
Этот запрос вернет строки, где значение salary
отличается от значения bonus
, учитывая NULL
.
Работа с NULL
в агрегатных функциях
NULL
в агрегатных функцияхАгрегатные функции и NULL
NULL
Агрегатные функции, такие как SUM
, AVG
, MAX
, MIN
, игнорируют NULL
значения.
Этот запрос вычисляет среднюю зарплату, игнорируя NULL
значения в столбце salary
.
Использование функции COUNT
COUNT
Функция COUNT
с аргументом *
подсчитывает все строки, включая те, где значения NULL
, а COUNT(column_name)
подсчитывает только те строки, где значение в указанной колонке не равно NULL
.
Примеры использования NULL
в сложных условиях
NULL
в сложных условияхФильтрация данных с учетом NULL
NULL
Этот запрос находит все заказы, сделанные в 2024 году, и либо не отправленные (то есть shipped_date
равно NULL
), либо отправленные после 30 июня 2024 года.
Условие с COALESCE
для замены NULL
значений
COALESCE
для замены NULL
значенийЭтот запрос возвращает бонусы сотрудников, заменяя NULL
значения бонусов на 0.
Таблица булевой логики
Ниже представлена таблица, расширяющая область значений булевой логики до троичной системы путем добавления индикатора NULL
для простых операций SQL:
a | b | a OR b | a AND b | a=b | NOT a |
True | True | True | True | True | False |
True | False | True | False | False | False |
True | NULL | True | NULL | NULL | False |
False | True | True | False | False | True |
False | False | False | False | True | True |
False | NULL | NULL | False | NULL | True |
NULL | True | True | NULL | NULL | NULL |
NULL | False | NULL | False | NULL | NULL |
NULL | NULL | NULL | NULL | NULL | NULL |
Заключение
Работа с NULL
в SQL требует осведомленности о том, как SQL обрабатывает отсутствующие значения. Использование специальных операторов и функций позволяет корректно обрабатывать NULL
и избегать ошибок при выполнении запросов. Важно помнить, что прямое сравнение с NULL
не дает ожидаемых результатов, поэтому следует использовать IS NULL
и IS NOT NULL
для проверки наличия значения.
Last updated