Ответ
UNION и JOIN — это операторы для комбинирования данных, но они работают в разных плоскостях.
JOINобъединяет таблицы по горизонтали (добавляет столбцы), связывая строки по условию совпадения значений в связанных столбцах.UNIONобъединяет результаты запросов по вертикали (добавляет строки), складывая наборы записей один под другим.
Визуализация:
JOIN (Горизонтальное объединение):
Таблица A: [id, name] Таблица B: [id, city]
JOIN ON A.id = B.id
Результат: [id, name, city]
UNION (Вертикальное объединение):
Запрос 1: [id, name] из Таблицы X
UNION
Запрос 2: [id, name] из Таблицы Y
Результат: [id, name] (все строки из X и Y)
Ключевые отличия:
| Параметр | JOIN | UNION |
|---|---|---|
| Направление | Горизонтальное (столбцы) | Вертикальное (строки) |
| Условие | ON / USING (ключи связи) |
Совпадение количества, порядка и типов столбцов |
| Дубликаты | Сохраняются (каждая комбинация) | Удаляются (если не UNION ALL) |
| Структура | Результирующая таблица содержит столбцы из всех исходных таблиц | Результирующая таблица имеет такую же структуру, как каждый из запросов |
Пример JOIN (INNER JOIN):
-- Объединяем заказы с информацией о клиентах
SELECT o.order_id, o.amount, c.customer_name
FROM orders o
JOIN customers c ON o.customer_id = c.id;
Пример UNION:
-- Объединяем списки email из разных источников
SELECT email FROM current_clients
UNION -- Удалит повторяющиеся email
SELECT email FROM archived_clients
ORDER BY email;
-- Чтобы сохранить дубликаты, используем UNION ALL
SELECT email FROM current_clients
UNION ALL
SELECT email FROM archived_clients;
Практическое правило: Используйте JOIN, когда нужно дополнить строку данными из другой таблицы. Используйте UNION, когда нужно объединить похожие наборы записей из разных источников.