MINUS в Oracle SQL: как получить разницу между результатами двух запросов

🟢 MINUS в Oracle SQL. Введение

Оператор MINUS позволяет вычесть строки второго запроса из первого.
Он возвращает только те строки, которые есть в первом запросе и отсутствуют во втором.

🔍 Это как математическая разность множеств: A − B = всё, что есть в A, но нет в B.


🔤 Написание

Синтаксис:

sql
SELECT столбцы FROM таблица_1
MINUS
SELECT столбцы FROM таблица_2;

Требования:

  • Одинаковое количество столбцов

  • Совместимые типы данных

  • Дубликаты удаляются (результат — уникальный)


🔄 Где часто используется

  • Поиск исключений

  • Анализ отсутствующих данных

  • Сравнение источников, архивов, копий

  • Проверка расхождений между системами

  • Обнаружение удалённых или новых записей


🧪 10 Примеров использования MINUS с пояснениями

1️⃣ Сотрудники, не встречающиеся в истории

sql
SELECT employee_id FROM employees
MINUS
SELECT employee_id FROM job_history;

Сотрудники, у которых нет записей в истории должностей.


2️⃣ Имена, которые не являются контактами клиентов

sql
SELECT first_name FROM employees
MINUS
SELECT contact_name FROM customers;

Имена сотрудников, которые не совпадают с именами клиентов.


3️⃣ MINUS и фильтрация

sql
SELECT department_id FROM employees WHERE salary > 10000
MINUS
SELECT department_id FROM departments WHERE location_id = 1700;

Отделы с высокими зарплатами, но не находящиеся в локации 1700.


4️⃣ MINUS с подзапросом

sql
SELECT customer_id FROM orders
MINUS
SELECT customer_id FROM complaints WHERE status = 'OPEN';

Клиенты с заказами, но без открытых жалоб.


5️⃣ МИНУС с приведением типов

sql
SELECT TO_CHAR(order_id) FROM orders
MINUS
SELECT reference_number FROM payments;

Заказы, которых нет в списке оплаченных.


6️⃣ MINUS в представлении

sql
CREATE OR REPLACE VIEW deleted_employees AS
SELECT employee_id FROM backup_employees
MINUS
SELECT employee_id FROM employees;

Список уволенных или удалённых сотрудников.


7️⃣ MINUS и NULL — осторожно!

sql
SELECT NULL FROM dual
MINUS
SELECT NULL FROM dual;

⚠️ Результат — пустой, потому что NULL = NULL не считается совпадением.


8️⃣ МИНУС для идентификации расхождений

sql
SELECT product_id FROM warehouse_1
MINUS
SELECT product_id FROM warehouse_2;

Товары, которые есть на складе 1, но отсутствуют на складе 2.


9️⃣ MINUS со строками

sql
SELECT region FROM customers
MINUS
SELECT region FROM archived_customers;

Регионы, в которых активные, но не архивные клиенты.


🔟 МИНУС и ORDER BY (только в конце)

sql
(SELECT department_id FROM employees
MINUS
SELECT department_id FROM job_history)
ORDER BY department_id;

Сортировка применяется только к итоговому результату.


🧩 Заключение

Оператор MINUS — это надёжный способ определить разницу между двумя наборами данных.
Он особенно полезен при аудите, тестировании, выявлении ошибок и поиске отсутствующих данных.

💡 Советы:

  • Используйте MINUS, если нужно понять, что есть в первом запросе, но отсутствует во втором

  • Проверяйте соответствие столбцов и типов

  • Помните, что NULL может не сравниваться как ожидается


🔜 Следующая статья:

INTERSECT в Oracle SQL: как находить пересечения данных между запросами


Понравилась статья? Поделиться с друзьями:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest
0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии