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

🟢 Введение

INTERSECT — это оператор множеств в SQL, который возвращает только те строки, которые присутствуют в обоих результатах двух SELECT-запросов.
Работает по принципу: только общее, без дубликатов.


🔤 Написание

Синтаксис:

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

Условия:

  • Количество и порядок столбцов должны совпадать

  • Типы данных должны быть совместимыми

  • Дубликаты автоматически удаляются


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

  • Поиск пересечений между двумя наборами данных

  • Определение общих клиентов, сотрудников, заказов

  • Сравнение архивов и текущих записей

  • Объединение результатов, где важны совпадения

  • Проверка логических пересечений в аналитике


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

1️⃣ Простое пересечение

sql
SELECT employee_id FROM employees
INTERSECT
SELECT employee_id FROM job_history;

Сотрудники, которые есть и в текущем штате, и в истории должностей.


2️⃣ INTERSECT по имени

sql
SELECT first_name FROM employees
INTERSECT
SELECT contact_name FROM customers;

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


3️⃣ INTERSECT с WHERE-фильтрацией

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

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


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

sql
SELECT customer_id FROM orders
INTERSECT
SELECT customer_id FROM (
SELECT customer_id FROM complaints WHERE status = 'OPEN'
);

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


5️⃣ INTERSECT с приведением типов

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

Пересечение заказов и платежей по совпадающим идентификаторам.


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

sql
CREATE OR REPLACE VIEW common_suppliers AS
SELECT supplier_id FROM active_suppliers
INTERSECT
SELECT supplier_id FROM certified_suppliers;

Поставщики, которые активны и сертифицированы.


7️⃣ INTERSECT и NULL — не сравнивается!

sql
SELECT NULL FROM dual
INTERSECT
SELECT NULL FROM dual;

⚠️ Не вернёт строку — в SQL NULL = NULL всегда FALSE.


8️⃣ INTERSECT с выражениями

sql
SELECT employee_id, department_id FROM employees
INTERSECT
SELECT manager_id, department_id FROM departments;

Менеджеры, которые также являются сотрудниками в тех же отделах.


9️⃣ INTERSECT с дубликатами (будут убраны)

sql
SELECT job_id FROM employees
INTERSECT
SELECT job_id FROM employees;

Результат — уникальные job_id (дубликаты удаляются).


🔟 INTERSECT и ORDER BY (только в конце)

sql
(SELECT country_id FROM customers
INTERSECT
SELECT country_id FROM suppliers)
ORDER BY country_id;

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


🧩 Заключение

INTERSECT — это способ выделить общее между двумя наборами данных.
Он работает чётко: если строка есть в обоих SELECT-запросах — она попадёт в результат. Если нет — будет отброшена.

💡 Советы:

  • Используйте INTERSECT, когда важно найти точные совпадения

  • Убедитесь, что SELECT-запросы возвращают одинаковое количество столбцов

  • Если нужна проверка совпадений между таблицами — INTERSECT идеален


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

Оператор MINUS в Oracle SQL — как вычитать один результат запроса из другого

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