Фильтрация данных без NULL значений

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

Основные способы фильтрации данных без NULL значений

Использование оператора IS NOT NULL

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

Примеры:

-- Выбирает все строки, где значение в столбце salary не NULL
SELECT employee_id, name, salary
FROM employees
WHERE salary IS NOT NULL;

Этот запрос вернет все строки из таблицы employees, где значение salary не равно NULL.

Фильтрация нескольких столбцов

Вы можете фильтровать строки, где несколько столбцов не содержат NULL значений.

Пример:

-- Выбирает все строки, где значения в столбцах salary и bonus не NULL
SELECT employee_id, name, salary, bonus
FROM employees
WHERE salary IS NOT NULL AND bonus IS NOT NULL;

Этот запрос вернет строки, где оба столбца, salary и bonus, не равны NULL.

Использование COALESCE для замены NULL значений

Функция COALESCE позволяет заменить NULL значениями на другие значения, что может быть полезно при фильтрации.

Пример:

-- Заменяет NULL в столбце bonus на 0 и выбирает только те строки, где значение в столбце bonus больше 0
SELECT employee_id, name, COALESCE(bonus, 0) AS bonus
FROM employees
WHERE COALESCE(bonus, 0) > 0;

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

Фильтрация с использованием подзапросов

Можно использовать подзапросы для фильтрации строк, где значение в столбце не равно NULL.

Пример:

-- Выбирает сотрудников, чьи ID присутствуют в таблице orders и не равны NULL
SELECT employee_id, name
FROM employees
WHERE employee_id IN (
    SELECT DISTINCT employee_id
    FROM orders
    WHERE employee_id IS NOT NULL
);

Этот запрос возвращает сотрудников, чьи employee_id присутствуют в таблице orders и не равны NULL.

Фильтрация с использованием агрегатных функций

При использовании агрегатных функций вы можете фильтровать строки на основе агрегированных значений.

Пример:

-- Выбирает отделы, где сумма зарплат сотрудников больше 0
SELECT department_id, SUM(salary) AS total_salary
FROM employees
GROUP BY department_id
HAVING SUM(salary) IS NOT NULL AND SUM(salary) > 0;

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

Примеры фильтрации данных без NULL значений

Пример 1: Фильтрация сотрудников с ненулевой зарплатой

-- Выбирает сотрудников с ненулевой зарплатой
SELECT employee_id, name, salary
FROM employees
WHERE salary IS NOT NULL;

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

Пример 2: Фильтрация заказов с ненулевым количеством

-- Выбирает заказы с ненулевым количеством товара
SELECT order_id, product_id, quantity
FROM order_items
WHERE quantity IS NOT NULL AND quantity > 0;

Этот запрос возвращает заказы, где количество товара не равно NULL и больше 0.

Пример 3: Фильтрация продуктов с ненулевой ценой и скидкой

-- Выбирает продукты с ненулевой ценой и ненулевой скидкой
SELECT product_id, product_name, price, discount
FROM products
WHERE price IS NOT NULL AND discount IS NOT NULL;

Этот запрос возвращает продукты, где значения в столбцах price и discount не равны NULL.

Пример 4: Фильтрация клиентов с заполненным email

-- Выбирает клиентов с ненулевым значением email
SELECT customer_id, customer_name, email
FROM customers
WHERE email IS NOT NULL;

Этот запрос возвращает клиентов, у которых email не равен NULL.

Заключение

Фильтрация данных без NULL значений помогает сосредоточиться на строках с полными данными и избежать ошибок, связанных с отсутствием данных. Использование операторов IS NOT NULL, функции COALESCE, подзапросов и агрегатных функций позволяет эффективно обрабатывать и анализировать данные, исключая строки с NULL значениями.

Last updated