JOIN
和UNION
之间有什么区别?我能举个例子吗?
答案 0 :(得分:275)
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)
答案 1 :(得分:56)
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
为真的两个表中的所有行。
答案 2 :(得分:43)
答案 3 :(得分:40)
联接和联合可用于组合来自一个或多个表的数据。不同之处在于数据的组合方式。
简单来说,加入将数据合并到新列。如果两个表连接在一起,那么第一个表中的数据将显示在同一行中第二个表的列旁边的一组列中。
联合将数据合并到新行中。如果两个表“联合”在一起,则第一个表中的数据位于一组行中,而第二个表中的数据位于另一个行中。这些行的结果相同。
以下是连接的可视化描述。表A和B的列合并为一个结果。
结果中的每一行都包含BOTH表A和B中的列。当一个表中的列与另一个表中的列匹配时,将创建行。此匹配称为连接条件。
这使得联接非常适合查找值并将其包含在结果中。这通常是非规范化(反转规范化)的结果,并涉及在一个表中使用外键来通过使用另一个中的主键来查找列值。
现在将上述描述与联盟进行比较。在联合中,结果中的每一行都来自一个表或另一个表。在联合中,不会组合列来创建结果,而是组合行。
连接和联合都可用于将来自一个或多个表的数据组合成单个结果。他们两个都是不同的方式。虽然联接用于组合来自不同表的列,但联合用于组合行。
答案 4 :(得分:38)
连接用于显示具有相同或的列 不同表中的不同名称。输出显示 将单独显示所有列。那就是 列将彼此相邻对齐。
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
答案 5 :(得分:20)
答案 6 :(得分:9)
Union使两个查询看起来像一个。连接用于在单个查询语句中检查两个或多个表
答案 7 :(得分:2)
联接和联合可用于组合来自一个或多个表的数据。不同之处在于数据的组合方式。
简单来说,连接将数据组合到新列中。如果两个表连接在一起,那么第一个表中的数据将显示在同一行中第二个表的列旁边的一组列中。
Unions将数据合并到新行中。如果两个表一起“联合”,则第一个表中的数据位于一组行中,而第二个表中的数据位于另一个表中。这些行的结果相同。
答案 8 :(得分:1)
请记住,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
ID,值,ID,值
1,3,1,3
答案 9 :(得分:0)
1。 SQL Joins子句用于组合数据库中两个或多个表的记录。 JOIN是一种通过使用每个表共有的值来组合两个表中的字段的方法。
2。 SQL UNION运算符组合了两个或多个SELECT语句的结果。 UNION中的每个SELECT语句必须具有相同的列数。列还必须具有类似的数据类型。此外,每个SELECT语句中的列必须具有相同的顺序。
例如: 表1客户/表2订单
内部联接:
SELECT ID,NAME,AMOUNT,DATE
FROM CUSTOMERS
INNER JOIN ORDERS
ON CUSTOMERS.ID = ORDERS.CUSTOMER_ID;
联合:
SELECT ID,NAME,AMOUNT,DATE
FROM CUSTOMERS
LEFT JOIN ORDERS
ON CUSTOMERS.ID = ORDERS.CUSTOMER_ID
UNION
SELECT ID,NAME,AMOUNT,DATE 来自客户
正确的加入订单
ON CUSTOMERS.ID = ORDERS.CUSTOMER_ID;
答案 10 :(得分:0)
Ussing 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
Ussing JOINs
JOIN,您可以根据表之间的逻辑关系从两个或多个表中检索数据。
JOIN Example: SELECT a.Column1, b.Column2 FROM TblA a INNER JOIN TblB b ON a.Id = b.id
答案 11 :(得分:-1)
答案 12 :(得分:-1)
在摘要中,它们是相似的,因为两个表或结果集正在组合,但UNION实际上用于将结果集与具有相似数据类型的列的相同列数组合。 STRUCTURE是相同的,只添加了新行。
在联接中,您可以将表/结果集与任何可能的结构组合在一起,包括没有共享/类似列的笛卡尔联接。
答案 13 :(得分:-1)
联合操作是垂直行汇总的合并结果, 联合操作是水平列汇总的合并结果。
答案 14 :(得分:-1)
JOIN 用于通过基于某种数据关系连接列来横向创建表。以更易于理解和更有意义的方式呈现数据。
UNION 垂直用于“连接/扩展”表中的数据。要使用 UNION,您需要确保在每个数据集中选择相同的列号,并且它们确实具有相同的数据类型。
答案 15 :(得分:-2)
我喜欢认为一般区别在于: