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


252

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


Любая современная DBS, как MariaDB , реализует команду UNION JOIN. Это команда SQL & nbsp; 3 , но она не известна и не используется. Узнайте больше на UNION JOIN .
Остон

Ответы:


301

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)

6
Подскажите, пожалуйста, что это такое UNION-JOINи как я могу выполнить это в стандартном SQL? Мария БД имеет команду union join, но другие базы данных нет. Спасибо.
Эрран Морад

73

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

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

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

Вот визуальное изображение объединения. Столбцы таблицы A и B объединены в один результат.

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

Каждая строка в результате содержит столбцы из ОБА таблицы A и B. Строки создаются, когда столбцы из одной таблицы соответствуют столбцам из другой. Это совпадение называется условием соединения.

Это делает объединения действительно хорошими для поиска значений и включения их в результаты. Обычно это является результатом денормализации (обратной нормализации) и включает использование внешнего ключа в одной таблице для поиска значений столбцов с использованием первичного ключа в другой.

Теперь сравните вышеприведенное изображение с изображением союза. В объединении каждая строка в результате получается из одной таблицы ИЛИ из другой. В объединении столбцы не объединяются для создания результатов, строки объединяются.

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

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

Источник


4
Это потрясающий визуальный пример. Я был почти уверен, что понял после других ответов, но это полностью прояснилось.
seadoggie01

Для примера объединения, с технической точки зрения, не должно ли быть 10 столбцов для результата?
Бхарат Рам

60

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

Используя JOIN , вы можете извлекать данные из двух или более таблиц на основе логических связей между таблицами. Объединения показывают, как 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.


Join может получать данные из одной * или нескольких таблиц. Не обязательно два
Кеннет Селеста

51

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

Для СОЮЗА:

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

ДЛЯ ПРИСОЕДИНЕНИЯ:

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


9
Эти изображения подразумевают, что FULL OUTER JOINэто то же самое UNION, что и есть различия
icc97

1
Этот ответ указывает на то, что эти образы сбивают с толку (что это за IMO), но затем не объясняют почему и не дают каких-либо разъяснений к исходному вопросу.
Джош Д.

1
Каждое изображение с диаграммами прекрасно объясняет ситуацию. Нет единого изображения, которое могло бы объединить все диаграммы. Это будет более запутанным.
Java Main

41

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

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

UNION:

Оператор множеств 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

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

UNION означает, что у вас есть таблицы или наборы результатов с одинаковым количеством и типом столбцов, и вы добавляете их в таблицы / наборы результатов вместе. Посмотрите на этот пример:

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

21

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

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

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


9

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


3

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

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

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


1

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

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

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

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


6
Это соответствует стандарту ANSI, UNION ALL не объединяет результаты
vzczc

1
Смотрите также UNIONvs UNION ALL stackoverflow.com/questions/49925/…
Jaider

0

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

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

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

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

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

ОТ КЛИЕНТОВ


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


ON CUSTOMERS.ID = ORDERS.CUSTOMER_ID;

союз:

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


ОТ КЛИЕНТОВ


СЛЕДУЕТ ЗАКАЗАТЬ


ON CUSTOMERS.ID = ORDERS.CUSTOMER_ID

UNION

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


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


ON CUSTOMERS.ID = ORDERS.CUSTOMER_ID;


0

Ussing UNION

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

UNION Пример:
ВЫБЕРИТЕ 121 AS [Column1], 221 AS [Column2]
UNION
ВЫБЕРИТЕ 321 AS [Column1], 422 AS [Column2]
Вывод:

Столбец1 Столбец2
-------------------
121 221
321 422

Ussing JOINs

СОЕДИНЕНИЯ, вы можете извлечь данные из двух или более таблиц на основе логических отношений между таблицами.

ПРИСОЕДИНИТЬСЯ Пример:
ВЫБЕРИТЕ a.Column1, b.Column2 ИЗ TblA a ВНУТРЕННЕЕ СОЕДИНЕНИЕ TblB b ON a.Id = b.id


-1

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

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


-1

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

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

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


-1

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


-3

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

  • СОЕДИНЯЕТСЯ за столами
  • UNION (et all) объединяет запросы.

1
Возникает вопрос - объединение упоминается в терминах «соединение», а объединение упоминается в терминах необъяснимых «объединений». Во всяком случае, что, по вашему мнению, вы бы добавили помимо других 10-летних ответов с высокими голосами, которые делают это "полезным"? (Риторика.) См. Текст при наведении курсора на стрелку.
Филипп
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.