UNION в Oracle SQL: как объединять запросы в один результат

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

Оператор UNION в Oracle SQL используется для объединения результатов двух или более SELECT-запросов в одну результирующую выборку. Он исключает повторяющиеся строки по умолчанию. Если необходимо сохранить дубликаты — используется UNION ALL. Это мощный способ агрегации данных из разных источников или таблиц с одинаковой структурой.


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

SELECT ... FROM ...
UNION
SELECT ... FROM ...;
  • Количество и типы столбцов в обоих SELECT должны совпадать
  • Сортировка применяется только к итоговому набору

Пример:

SELECT name FROM customers
UNION
SELECT name FROM vendors;

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

  • Слияние данных из разных таблиц
  • Объединение подмножеств для отчетов
  • Унификация выборок с разной логикой фильтрации
  • Формирование сводной таблицы без создания представления

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

  1. Объединение клиентов и поставщиков:
SELECT name FROM customers
UNION
SELECT name FROM vendors;
  1. Список ID из двух таблиц:
SELECT id FROM employees
UNION
SELECT id FROM managers;
  1. Объединение с фильтрацией:
SELECT product_name FROM products WHERE category = 'Books'
UNION
SELECT product_name FROM products WHERE price > 1000;
  1. Использование UNION ALL (с дубликатами):
SELECT region FROM warehouses
UNION ALL
SELECT region FROM stores;
  1. Объединение email-адресов:
SELECT email FROM users
UNION
SELECT email FROM admins;
  1. Объединение двух временных таблиц:
SELECT * FROM temp_data_jan
UNION
SELECT * FROM temp_data_feb;
  1. UNION с датами:
SELECT hire_date FROM employees
UNION
SELECT contract_date FROM contractors;
  1. Объединение значений с разными фильтрами:
SELECT department_id FROM employees WHERE job_id = 'IT_PROG'
UNION
SELECT department_id FROM employees WHERE salary > 5000;
  1. Слияние значений с группировкой:
SELECT department_id FROM employees
GROUP BY department_id
UNION
SELECT NULL FROM dual;
  1. Слияние ID и преобразованных значений:
SELECT TO_CHAR(employee_id) AS id_str FROM employees
UNION
SELECT customer_id FROM customers;
  1. Объединение таблиц разных лет:
SELECT year, revenue FROM financials_2022
UNION
SELECT year, revenue FROM financials_2023;
  1. UNION в подзапросе:
SELECT * FROM (
  SELECT id FROM clients
  UNION
  SELECT id FROM partners
);
  1. Объединение времён событий:
SELECT event_time FROM logs_today
UNION
SELECT event_time FROM logs_archive;
  1. UNION с сортировкой:
SELECT name FROM employees
UNION
SELECT name FROM freelancers
ORDER BY name;
  1. Объединение по типу пользователя:
SELECT user_id, 'customer' AS user_type FROM customers
UNION
SELECT user_id, 'admin' FROM admins;
  1. Объединение строковых значений:
SELECT 'email' AS contact_type, email FROM users
UNION
SELECT 'phone', phone FROM users;
  1. UNION ALL для подсчёта дубликатов:
SELECT product_id FROM sales
UNION ALL
SELECT product_id FROM returns;
  1. Слияние транзакций с пометкой:
SELECT id, 'purchase' AS action FROM purchases
UNION
SELECT id, 'refund' FROM refunds;
  1. Объединение дат событий и заданий:
SELECT created_at FROM tickets
UNION
SELECT scheduled_at FROM tasks;
  1. UNION с преобразованием чисел в строки:
SELECT TO_CHAR(order_id) FROM orders
UNION
SELECT tracking_code FROM shipments;
  1. Объединение сотрудников по условиям:
SELECT employee_id FROM employees WHERE hire_date < SYSDATE - 365
UNION
SELECT employee_id FROM employees WHERE salary > 10000;
  1. Объединение зарплат с бонусами:
SELECT salary FROM employees
UNION
SELECT bonus FROM bonuses;
  1. Использование UNION в WITH:
WITH unified AS (
  SELECT id FROM table_a
  UNION
  SELECT id FROM table_b
)
SELECT * FROM unified;
  1. Объединение с фильтрацией по имени:
SELECT name FROM vendors WHERE name LIKE 'A%'
UNION
SELECT name FROM customers WHERE name LIKE 'A%';
  1. Слияние заказов с разных каналов:
SELECT order_id, 'online' FROM online_orders
UNION
SELECT order_id, 'store' FROM store_orders;
  1. Объединение логинов из двух систем:
SELECT username FROM system_a_logins
UNION
SELECT username FROM system_b_logins;
  1. Сравнение результатов двух выборок:
SELECT DISTINCT region FROM sales_q1
UNION
SELECT DISTINCT region FROM sales_q2;
  1. UNION с CASE:
SELECT id, CASE WHEN status = 'Y' THEN 'Active' ELSE 'Inactive' END FROM users
UNION
SELECT id, 'Unknown' FROM deleted_users;
  1. Слияние контактных данных:
SELECT phone FROM contacts
UNION
SELECT mobile FROM contacts;
  1. Объединение времён последнего действия:
SELECT last_login FROM users
UNION
SELECT last_access FROM admins;
  1. UNION ALL с подсчётом через GROUP BY:
SELECT user_id, COUNT(*) FROM (
  SELECT user_id FROM actions_1
  UNION ALL
  SELECT user_id FROM actions_2
) GROUP BY user_id;
  1. Объединение значений с NULL:
SELECT NULL AS code FROM dual
UNION
SELECT code FROM lookup_table;
  1. Слияние системных логов:
SELECT log_text FROM app_logs
UNION
SELECT log_text FROM db_logs;
  1. UNION с ORDER BY по алиасу:
SELECT name FROM clients
UNION
SELECT name FROM leads
ORDER BY name;
  1. UNION с преобразованием дат:
SELECT TO_CHAR(date_created, 'YYYY-MM-DD') FROM users
UNION
SELECT TO_CHAR(joined, 'YYYY-MM-DD') FROM members;
  1. Объединение email и phone в одном поле:
SELECT email AS contact FROM users
UNION
SELECT phone FROM users;
  1. UNION и аналитические функции:
SELECT id FROM (
  SELECT id, RANK() OVER (ORDER BY score DESC) AS rnk FROM scores_q1
)
UNION
SELECT id FROM (
  SELECT id, RANK() OVER (ORDER BY score DESC) FROM scores_q2
);
  1. Сравнение значений после объединения:
SELECT * FROM (
  SELECT id, 'Source A' FROM table_a
  UNION
  SELECT id, 'Source B' FROM table_b
) WHERE id < 1000;
  1. UNION внутри SELECT:
SELECT (SELECT 'a' FROM dual UNION SELECT 'b' FROM dual) AS val FROM dual;
  1. Объединение результатов API-логов:
SELECT status_code FROM api_log_prod
UNION
SELECT status_code FROM api_log_stage;

🧩 Заключение

UNION — мощный способ объединять данные из разных источников, при этом автоматически убирая дубликаты.
Если важна производительность и повторы допустимы — используйте UNION ALL.

💡 Советы:

  • Убедитесь, что столбцы и их типы совпадают

  • Используйте ORDER BY только в конце объединённого запроса

  • Применяйте UNION для интеграции и отчётности


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

INTERSECT в Oracle SQL — как найти пересечение результатов двух запросов

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