В чем разница между JOIN
и UNION
? Могу я привести пример?
В чем разница между JOIN и UNION?
Ответы (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)
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
.
Вы можете увидеть одни и те же схематические объяснения для обоих, но они полностью сбивают с толку.
Для СОЮЗА:
Для присоединения:
FULL OUTER JOIN
совпадает с UNION
, что есть различия
- person icc97; 18.10.2017
ПРИСОЕДИНИТЬСЯ:
Объединение используется для отображения столбцов с одинаковыми или разными именами из разных таблиц. В отображаемом выводе все столбцы будут показаны по отдельности. То есть столбцы будут выровнены рядом друг с другом.
СОЮЗ:
Оператор набора 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
Это совершенно разные вещи.
join позволяет связать похожие данные в разных таблицах.
Объединение возвращает результаты двух разных запросов как один набор записей.
Union делает два запроса похожими на один. Объединения предназначены для изучения двух или более таблиц в одном запросе.
Объединения и объединения можно использовать для объединения данных из одной или нескольких таблиц. Разница заключается в том, как объединяются данные.
Проще говоря, объединения объединяют данные в новые столбцы. Если две таблицы объединены вместе, то данные из первой таблицы отображаются в одном наборе столбцов рядом со столбцом второй таблицы в той же строке.
Союзы объединяют данные в новые строки. Если две таблицы «объединены» вместе, то данные из первой таблицы находятся в одном наборе строк, а данные из второй таблицы - в другом наборе. Строки в том же результате.
Помните, что объединение объединит результаты (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
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;
Использование 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
Операция объединения - это комбинированный результат вертикального агрегирования строк, операция объединения - комбинированный результат горизонтального агрегированного значения столбцов.
Говоря абстрактно, они похожи в том смысле, что объединяются две таблицы или наборы результатов, но UNION на самом деле предназначен для объединения наборов результатов с ОДНИМ КОЛИЧЕСТВОМ СТОЛБЦОВ с СТОЛБЦАМИ, ИМЕЮЩИЕ ПОДОБНЫЕ ТИПЫ ДАННЫХ. СТРУКТУРА такая же, добавляются только новые строки.
В объединениях вы можете комбинировать таблицы / наборы результатов с любой возможной структурой, включая декартово соединение, в котором НЕТ общих / похожих столбцов.
Мне нравится думать об общем различии как о следующем:
- JOINS соединить таблицы
- UNION (и все) объединяет запросы.