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

В чем разница между JOIN и UNION? Могу я привести пример?


person Gold    schedule 25.05.2009    source источник
comment
Любая современная СУБД, такая как MariaDB, реализует команду UNION JOIN. Это команда SQL3, но она малоизвестна и не используется. Узнайте больше о UNION JOIN .   -  person Auston    schedule 03.11.2015


Ответы (14)


UNION помещает строки из запросов друг за другом, а JOIN создает декартово произведение и подмножества его - совершенно разные операции. Тривиальный пример UNION:

mysql> SELECT 23 AS bah
    -> UNION
    -> SELECT 45 AS bah;
+-----+
| bah |
+-----+
|  23 | 
|  45 | 
+-----+
2 rows in set (0.00 sec)

аналогичный тривиальный пример JOIN:

mysql> SELECT * FROM 
    -> (SELECT 23 AS bah) AS foo 
    -> JOIN 
    -> (SELECT 45 AS bah) AS bar
    -> ON (33=33);
+-----+-----+
| foo | bar |
+-----+-----+
|  23 |  45 | 
+-----+-----+
1 row in set (0.01 sec)
person Alex Martelli    schedule 25.05.2009
comment
Ответ @Alex Martelli был почти идеальным, если он не слишком лаконичен, полагаясь на концепцию декартова произведения (из которой мне пришлось поискать, чтобы понять, что это значит) - person Nemo; 01.11.2020

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

Используя JOINs, вы можете получать данные из двух или несколько таблиц на основе логических отношений между таблицами. Соединения указывают, как SQL должен использовать данные из одной таблицы для выбора строк в другой таблице.

Операция UNION отличается от использования JOIN, которые объединяют столбцы из двух таблиц.

UNION Пример:

SELECT 1 AS [Column1], 2 AS [Column2]
UNION
SELECT 3 AS [Column1], 4 AS [Column2]

Выход:

Column1    Column2
-------------------
1          2
3          4

ПРИСОЕДИНЯЙТЕСЬ Пример:

SELECT a.Column1, b.Column2 FROM TableA a INNER JOIN TableB b ON a.Id = b.AFKId

Это выведет все строки из обеих таблиц, для которых выполняется условие a.Id = b.AFKId.

person Kirtan    schedule 25.05.2009
comment
Объединение может извлекать данные из одной * или нескольких таблиц. Не обязательно два - person Kennet Celeste; 18.06.2018

Вы можете увидеть одни и те же схематические объяснения для обоих, но они полностью сбивают с толку.

Для СОЮЗА:

Введите описание изображения здесь

Для присоединения:

Введите описание изображения здесь

person Java Main    schedule 28.05.2015
comment
Эти изображения подразумевают, что FULL OUTER JOIN совпадает с UNION, что есть различия - person icc97; 18.10.2017
comment
Этот ответ указывает на то, что эти изображения сбивают с толку (что это за IMO), но затем не объясняет, почему или предлагает какие-либо разъяснения по исходному вопросу. - person Josh D.; 23.11.2017
comment
Каждое изображение с диаграммами прекрасно объясняет ситуацию. Нет единого изображения, которое могло бы объединить все диаграммы. Это будет еще более запутанным. - person Java Main; 04.03.2018

ПРИСОЕДИНИТЬСЯ:

Объединение используется для отображения столбцов с одинаковыми или разными именами из разных таблиц. В отображаемом выводе все столбцы будут показаны по отдельности. То есть столбцы будут выровнены рядом друг с другом.

СОЮЗ:

Оператор набора UNION используется для объединения данных из двух таблиц, которые имеют столбцы с одинаковым типом данных. При выполнении UNION данные из обеих таблиц будут собраны в один столбец с одинаковым типом данных.

Например:

См. Две таблицы, показанные ниже:

Table t1
Articleno article price manufacturer_id
1 hammer 3 $ 1
2 screwdriver 5 $ 2

Table t2
manufacturer_id manufacturer
1 ABC Gmbh
2 DEF Co KG

Теперь для выполнения типа JOIN запрос показан ниже.

SELECT articleno, article, manufacturer
FROM t1 JOIN t2 ON (t1.manufacturer_id =
t2.manufacturer_id);

articelno article manufacturer
1 hammer ABC GmbH
2 screwdriver DEF Co KG

Это соединение.

СОЕДИНЕНИЕ означает, что у вас есть таблицы или набор результатов с одинаковым количеством и типом столбцов, и вы добавляете это в таблицы / наборы результатов вместе. Взгляните на этот пример:

Table year2006
Articleno article price manufacturer_id
1 hammer 3 $ 1
2 screwdriver 5 $ 2

Table year2007
Articleno article price manufacturer_id
1 hammer 6 $ 3
2 screwdriver 7 $ 4

SELECT articleno, article, price, manufactruer_id
FROM year2006
UNION
SELECT articleno, article, price, manufacturer_id
FROM year2007

articleno article price manufacturer_id
1 hammer 3 $ 1
2 screwdriver 5 $ 2
1 hammer 6 $ 3
2 screwdriver 7 $ 4
person Ganesh Narayan Tharol    schedule 08.07.2011

Это совершенно разные вещи.

join позволяет связать похожие данные в разных таблицах.

Объединение возвращает результаты двух разных запросов как один набор записей.

person adeshsuryan    schedule 26.03.2010

Union делает два запроса похожими на один. Объединения предназначены для изучения двух или более таблиц в одном запросе.

person James L    schedule 25.05.2009

Объединения и объединения можно использовать для объединения данных из одной или нескольких таблиц. Разница заключается в том, как объединяются данные.

Проще говоря, объединения объединяют данные в новые столбцы. Если две таблицы объединены вместе, то данные из первой таблицы отображаются в одном наборе столбцов рядом со столбцом второй таблицы в той же строке.

Союзы объединяют данные в новые строки. Если две таблицы «объединены» вместе, то данные из первой таблицы находятся в одном наборе строк, а данные из второй таблицы - в другом наборе. Строки в том же результате.

person VAHEED    schedule 24.05.2016

Помните, что объединение объединит результаты (SQL Server, чтобы быть уверенным) (функция или ошибка?)

select 1 as id, 3 as value
union
select 1 as id, 3 as value

id, значение

1,3

select * from (select 1 as id, 3 as value) t1 inner join (select 1 as id, 3 as value) t2 on t1.id = t2.id

идентификатор, значение, идентификатор, значение

1,3,1,3

person MonsterMagnet    schedule 25.05.2009
comment
Это соответствует стандарту ANSI, UNION ALL не объединяет результаты - person vzczc; 25.05.2009
comment
См. Также UNION vs UNION ALL stackoverflow.com/questions/49925/ - person Jaider; 27.06.2016

1. Предложение SQL Joins используется для объединения записей из двух или более таблиц в базе данных. JOIN - это средство для объединения полей из двух таблиц с использованием значений, общих для каждой из них.

2. Оператор SQL UNION объединяет результат двух или более операторов SELECT. Каждый оператор SELECT в UNION должен иметь одинаковое количество столбцов. Столбцы также должны иметь похожие типы данных. Кроме того, столбцы в каждом операторе SELECT должны быть в одинаковом порядке.

например: таблица 1 клиенты / таблица 2 заказы

внутреннее соединение:

ВЫБЕРИТЕ ID, ИМЯ, СУММУ, ДАТУ

ОТ КЛИЕНТОВ

ЗАКАЗЫ НА ВНУТРЕННЕЕ СОЕДИНЕНИЕ

НА CUSTOMERS.ID = ORDERS.CUSTOMER_ID;

союз:

ВЫБЕРИТЕ ID, ИМЯ, СУММУ, ДАТУ

ОТ ЗАКАЗЧИКОВ

ЛЕВЫЕ ЗАКАЗЫ НА СОЕДИНЕНИЕ

НА CUSTOMERS.ID = ORDERS.CUSTOMER_ID

СОЮЗ

ВЫБЕРИТЕ ИДЕНТИФИКАТОР, ИМЯ, КОЛИЧЕСТВО, ДАТУ ОТ КЛИЕНТОВ

ПРАВИЛЬНЫЕ ЗАКАЗЫ НА СОЕДИНЕНИЕ

НА CUSTOMERS.ID = ORDERS.CUSTOMER_ID;

person ian    schedule 23.02.2016

Использование UNION

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

UNION Example:
SELECT 121 AS [Column1], 221 AS [Column2]
UNION
SELECT 321 AS [Column1], 422 AS [Column2]
Output:

Column1    Column2
-------------------
121          221
321          422

Использование JOINs

JOINs, вы можете извлекать данные из двух или более таблиц на основе логических отношений между таблицами.

JOIN Example:
SELECT a.Column1, b.Column2 FROM TblA a INNER JOIN TblB b ON a.Id = b.id

person user6341745    schedule 29.05.2018

Операция объединения - это комбинированный результат вертикального агрегирования строк, операция объединения - комбинированный результат горизонтального агрегированного значения столбцов.

person R.Baldha    schedule 29.09.2018

Говоря абстрактно, они похожи в том смысле, что объединяются две таблицы или наборы результатов, но UNION на самом деле предназначен для объединения наборов результатов с ОДНИМ КОЛИЧЕСТВОМ СТОЛБЦОВ с СТОЛБЦАМИ, ИМЕЮЩИЕ ПОДОБНЫЕ ТИПЫ ДАННЫХ. СТРУКТУРА такая же, добавляются только новые строки.

В объединениях вы можете комбинировать таблицы / наборы результатов с любой возможной структурой, включая декартово соединение, в котором НЕТ общих / похожих столбцов.

person danbk99    schedule 08.06.2016

Оператор UNION предназначен только для объединения двух или более операторов SELECT.

В то время как JOIN предназначен для выбора строк из каждой таблицы внутренним, внешним, левым или правым методом.

См. здесь и здесь. Есть лучшее объяснение с примерами.

person Nishad Up    schedule 27.07.2015

Мне нравится думать об общем различии как о следующем:

  • JOINS соединить таблицы
  • UNION (и все) объединяет запросы.
person laurie    schedule 04.04.2019
comment
Возникает вопрос - соединение упоминается в терминах соединения, а объединение упоминается в терминах необъяснимых объединений. В любом случае, что, по вашему мнению, вы бы добавили помимо других получивших высокую оценку ответов 10-летней давности, что сделало бы это полезным? (Риторический.) См. Текст стрелки голосования при наведении курсора мыши. - person philipxy; 04.04.2019