Эти два оператора в SQL на первый взгляд делают похожее — они «объединяют» таблицы. Но делают это по-разному и для разных целей.
Вкратце: JOIN
объединяет по горизонтали (добавляются столбцы из разных таблиц), тогда как UNION
объединяет по вертикали (добавляются строки из разных запросов).
JOIN — склеиваем строки по какому-то условию
JOIN
берёт строки из одной таблицы и дополняет их данными из другой. Главное — задать условие, по которому строки связаны (ON ...
). Можно так склеить столбцы из большого числа таблиц.
Оператор JOIN имеет много вариаций, все описаны подробно здесь.
UNION — просто склеиваем выборки
UNION
берёт результаты двух запросов и объединяет их в один список. Таблицы не обязательно связаны, но важно, чтобы в обоих подзапросах было одинаковое количество столбцов и совместимые типы.
Например, у нас есть две таблицы «online sales» и «offline sales»:
online_sales
product | revenue |
---|---|
Phone | 1000 |
Laptop | 2000 |
offline_sales
product | revenue |
---|---|
Monitor | 1500 |
Laptop | 2000 |
Тогда объединение этих таблиц:
1 2 3 |
SELECT product, revenue FROM online_sales UNION SELECT product, revenue FROM offline_sales; |
product | revenue |
---|---|
Phone | 1000 |
Laptop | 2000 |
Monitor | 1500 |
Обратите внимание, что в объединение таблиц не вошли дубликаты. Если дубликаты отсекать не нужно, то используйте UNION ALL.
1 2 3 |
SELECT product, revenue FROM online_sales UNION ALL SELECT product, revenue FROM offline_sales; |
product | revenue |
---|---|
Phone | 1000 |
Laptop | 2000 |
Monitor | 1500 |
Laptop | 2000 |