В чем разница между операторами SQL UNION и JOIN?

«В чем разница между операторами SQL UNION и JOIN?» — вопрос из категории Базы данных и SQL, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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, когда нужно объединить похожие наборы записей из разных источников.