INTERSECT в Oracle SQL — как найти общие строки между выборками

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

Оператор INTERSECT в Oracle SQL используется для получения пересечения результатов двух SELECT-запросов. Он возвращает только те строки, которые есть одновременно в обеих выборках. Дубликаты по умолчанию удаляются, как и в UNION. Это удобный способ выявить совпадающие записи из разных источников или по разным условиям.


🖋️ Синтаксис оператора INTERSECT

SELECT ... FROM ...
INTERSECT
SELECT ... FROM ...;
  • SELECT-запросы должны возвращать одинаковое количество столбцов и совместимые типы
  • Результат содержит только уникальные строки, которые присутствуют в обеих выборках

Пример:

SELECT employee_id FROM employees
INTERSECT
SELECT employee_id FROM managers;

🔄 Где используется INTERSECT в Oracle SQL

  • Поиск совпадающих значений из разных таблиц
  • Проверка, кто одновременно состоит в двух группах
  • Сравнение результата разных фильтров
  • Анализ пересечения между клиентами, пользователями, записями

📊 Примеры использования INTERSECT в Oracle SQL (1–50 из 50)

  1. Общие ID сотрудников и менеджеров:
SELECT employee_id FROM employees
INTERSECT
SELECT employee_id FROM managers;
  1. Совпадающие имена из двух таблиц:
SELECT name FROM employees
INTERSECT
SELECT name FROM ex_employees;
  1. Пересечение по email:
SELECT email FROM newsletter_subscribers
INTERSECT
SELECT email FROM registered_users;
  1. Пользователи, сделавшие покупку и оформившие возврат:
SELECT user_id FROM purchases
INTERSECT
SELECT user_id FROM returns;
  1. Товары, участвующие в двух распродажах:
SELECT product_id FROM sale_jan
INTERSECT
SELECT product_id FROM sale_feb;
  1. Студенты, зарегистрированные в двух курсах:
SELECT student_id FROM course_a
INTERSECT
SELECT student_id FROM course_b;
  1. Пересечение по дате создания:
SELECT created_at FROM audit_log_2022
INTERSECT
SELECT created_at FROM audit_log_2023;
  1. Общее между двумя отделами:
SELECT last_name FROM employees WHERE department_id = 10
INTERSECT
SELECT last_name FROM employees WHERE department_id = 20;
  1. Общие номера заказов:
SELECT order_number FROM orders_archive
INTERSECT
SELECT order_number FROM orders_current;
  1. Пересечение логинов по дате:
SELECT user_id FROM logins WHERE login_date > SYSDATE - 30
INTERSECT
SELECT user_id FROM logins WHERE login_date < SYSDATE;
  1. Общие позиции в заказах:
SELECT item_id FROM order_items_2022
INTERSECT
SELECT item_id FROM order_items_2023;
  1. Пользователи, оплатившие и получившие продукт:
SELECT user_id FROM payments
INTERSECT
SELECT user_id FROM deliveries;
  1. Пересечение по идентификатору проекта:
SELECT project_id FROM assigned_projects
INTERSECT
SELECT project_id FROM completed_projects;
  1. Сотрудники, работающие в двух странах:
SELECT employee_id FROM employees WHERE location = 'US'
INTERSECT
SELECT employee_id FROM employees WHERE location = 'UK';
  1. Дубликаты транзакций по дате:
SELECT transaction_date FROM transactions_jan
INTERSECT
SELECT transaction_date FROM transactions_feb;
  1. Общие email среди клиентов и сотрудников:
SELECT email FROM customers
INTERSECT
SELECT email FROM employees;
  1. Слияние активных и недавних пользователей:
SELECT user_id FROM active_users
INTERSECT
SELECT user_id FROM recent_logins;
  1. Пересечение заказов с возвратами:
SELECT order_id FROM orders
INTERSECT
SELECT order_id FROM returns;
  1. Сотрудники, уволенные и повторно нанятые:
SELECT employee_id FROM terminations
INTERSECT
SELECT employee_id FROM hires;
  1. Товары, возвращённые и отгруженные повторно:
SELECT product_id FROM returns
INTERSECT
SELECT product_id FROM re_shipments;
  1. Участники двух мероприятий:
SELECT person_id FROM event_participants WHERE event_id = 1
INTERSECT
SELECT person_id FROM event_participants WHERE event_id = 2;
  1. Совпадающие названия в справочниках:
SELECT name FROM directory_1
INTERSECT
SELECT name FROM directory_2;
  1. Пересечение по коду региона:
SELECT region_code FROM suppliers
INTERSECT
SELECT region_code FROM customers;
  1. Повторяющиеся номера телефонов:
SELECT phone FROM applicants
INTERSECT
SELECT phone FROM users;
  1. Общие действия пользователей:
SELECT user_id FROM user_actions WHERE action_type = 'login'
INTERSECT
SELECT user_id FROM user_actions WHERE action_type = 'purchase';
  1. Сопоставление транзакций по сумме:
SELECT amount FROM transactions_2023
INTERSECT
SELECT amount FROM transactions_2022;
  1. Совпадение ID между логами:
SELECT session_id FROM login_log
INTERSECT
SELECT session_id FROM error_log;
  1. Сравнение email по активности:
SELECT email FROM users WHERE last_login > SYSDATE - 30
INTERSECT
SELECT email FROM users WHERE is_active = 'Y';
  1. Совпадающие product_code в разных складах:
SELECT product_code FROM warehouse_a
INTERSECT
SELECT product_code FROM warehouse_b;
  1. Совпадение идентификаторов в XML:
SELECT id FROM xml_table_1
INTERSECT
SELECT id FROM xml_table_2;
  1. Совпадающие строки с типами данных CHAR:
SELECT CAST(code AS CHAR(5)) FROM temp_codes
INTERSECT
SELECT CAST(code AS CHAR(5)) FROM perm_codes;
  1. Сравнение дат между отчётами:
SELECT report_date FROM monthly_reports
INTERSECT
SELECT report_date FROM quarterly_reports;
  1. Общие роли пользователей:
SELECT role_name FROM user_roles
INTERSECT
SELECT role_name FROM audit_roles;
  1. Участники проекта и сотрудники отдела:
SELECT employee_id FROM project_team
INTERSECT
SELECT employee_id FROM employees WHERE department_id = 60;
  1. Пересечение email между таблицами маркетинга:
SELECT email FROM leads
INTERSECT
SELECT email FROM newsletter_subscribers;
  1. Сравнение ID в таблице заказов и логистики:
SELECT order_id FROM logistics
INTERSECT
SELECT order_id FROM orders;
  1. Пересечение времён событий:
SELECT event_time FROM calendar_events
INTERSECT
SELECT event_time FROM booking_slots;
  1. Совпадающие значения с NULL фильтрацией:
SELECT user_id FROM users WHERE phone IS NOT NULL
INTERSECT
SELECT user_id FROM support_tickets;
  1. Общее между JSON-таблицами:
SELECT id FROM json_table_a
INTERSECT
SELECT id FROM json_table_b;
  1. Совпадающие синонимы:
SELECT synonym FROM dictionary_a
INTERSECT
SELECT synonym FROM dictionary_b;
  1. Общее по пользователям в транзакциях:
SELECT user_id FROM credit_transactions
INTERSECT
SELECT user_id FROM debit_transactions;
  1. Пересечение по объектам в схемах:
SELECT object_name FROM user_objects
INTERSECT
SELECT object_name FROM all_objects;
  1. Сравнение времён создания и обновления:
SELECT created_at FROM resources
INTERSECT
SELECT updated_at FROM resources;
  1. Сопоставление ключей в API логах:
SELECT api_key FROM request_logs
INTERSECT
SELECT api_key FROM error_logs;
  1. Совпадающие данные между CSV-загрузками:
SELECT record_id FROM csv_upload_1
INTERSECT
SELECT record_id FROM csv_upload_2;
  1. Пересечение IP-адресов:
SELECT ip_address FROM login_history
INTERSECT
SELECT ip_address FROM blocked_ips;
  1. Сравнение email среди подписчиков:
SELECT email FROM beta_subscribers
INTERSECT
SELECT email FROM general_subscribers;
  1. Общие логины среди системных пользователей:
SELECT login FROM sys_users_a
INTERSECT
SELECT login FROM sys_users_b;
  1. Совпадение времён обновления:
SELECT last_update FROM settings_a
INTERSECT
SELECT last_update FROM settings_b;
  1. Пересечение сотрудников с бонусами:
SELECT employee_id FROM bonuses
INTERSECT
SELECT employee_id FROM employees;

📆 Заключение: зачем использовать INTERSECT в Oracle SQL

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


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

PIVOT в Oracle SQL — как превращать строки в столбцы для аналитики

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