Проверка на NULL

В SQL работа с NULL требует особого подхода, поскольку NULL представляет собой неопределенное или отсутствующее значение. Это делает прямое сравнение с NULL неприменимым. Вот как можно правильно проверять значения на NULL в SQL:

Проверка на NULL

Оператор IS NULL

Оператор IS NULL используется для проверки, является ли значение NULL.

SELECT *
FROM employees
WHERE manager_id IS NULL;

Этот запрос выбирает всех сотрудников, у которых manager_id равно NULL.

Оператор IS NOT NULL

Оператор IS NOT NULL проверяет, что значение не является NULL.

SELECT *
FROM employees
WHERE manager_id IS NOT NULL;

Этот запрос выбирает всех сотрудников, у которых manager_id не равно NULL.

Использование функций для работы с NULL

Функция COALESCE

Функция COALESCE возвращает первый ненулевой аргумент из списка. Это полезно для замены NULL значений на другие значения по умолчанию.

SELECT employee_id, COALESCE(bonus, 0) AS bonus_amount
FROM employees;

Этот запрос заменяет NULL в столбце bonus на 0.

Функция NULLIF

Функция NULLIF возвращает NULL, если два аргумента равны. В противном случае возвращает первый аргумент.

SELECT employee_id, NULLIF(bonus, 0) AS bonus_amount
FROM employees;

Этот запрос заменяет значение 0 в столбце bonus на NULL.

Функция IFNULL (или ISNULL в SQL Server)

Функция IFNULL (или ISNULL в SQL Server) заменяет NULL на указанное значение.

SELECT employee_id, IFNULL(bonus, 0) AS bonus_amount
FROM employees;

Этот запрос заменяет NULL в столбце bonus на 0.

Примеры использования NULL в условиях

Фильтрация данных с учетом NULL

Для учета NULL в фильтрации данных можно комбинировать проверки NULL с другими условиями.

SELECT *
FROM orders
WHERE order_date BETWEEN '2024-01-01' AND '2024-12-31'
AND (shipped_date IS NULL OR shipped_date > '2024-06-30');

Этот запрос выбирает все заказы, сделанные в 2024 году, которые либо не отправлены (shipped_date равно NULL), либо отправлены после 30 июня 2024 года.

Использование COALESCE в агрегациях

Использование COALESCE в агрегациях позволяет обрабатывать NULL значения при вычислении.

SELECT department_id, SUM(COALESCE(bonus, 0)) AS total_bonus
FROM employees
GROUP BY department_id;

Этот запрос вычисляет общую сумму бонусов для каждого отдела, заменяя NULL значения бонусов на 0.

Объединение строк с учетом NULL

При объединении строк с учетом NULL можно использовать функции для замены NULL значений.

SELECT employee_id, CONCAT(first_name, ' ', COALESCE(middle_name, ''), ' ', last_name) AS full_name
FROM employees;

Этот запрос объединяет имя, отчество и фамилию сотрудника в полное имя, заменяя NULL в middle_name на пустую строку.

Работа с NULL в сложных запросах

Комбинирование проверок на NULL с другими условиями

SELECT employee_id, salary
FROM employees
WHERE (salary IS NOT NULL AND salary > 50000)
OR (salary IS NULL AND bonus > 1000);

Этот запрос выбирает сотрудников с зарплатой больше 50,000, если зарплата указана, или сотрудников с бонусом больше 1,000, если зарплата не указана.

Использование NULL в подзапросах

SELECT employee_id, department_id
FROM employees e
WHERE EXISTS (
    SELECT 1
    FROM departments d
    WHERE d.department_id = e.department_id
    AND d.manager_id IS NULL
);

Этот запрос выбирает сотрудников, работающих в отделах, где manager_id равно NULL.

Заключение

Проверка на NULL в SQL требует использования специальных операторов и функций. Оператор IS NULL и IS NOT NULL позволяют проверять наличие или отсутствие значения, а функции COALESCE, NULLIF, IFNULL помогают обрабатывать NULL значения в различных контекстах. Эти подходы позволяют корректно обрабатывать отсутствующие данные и строить точные SQL-запросы.

Last updated