繁体   English   中英

JOIN 和 UNION 有什么区别?

[英]What is the difference between JOIN and UNION?

JOINUNION和有什么不一样? 我可以举个例子吗?

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将两个或多个查询的结果组合到一个结果集中,其中包括属于联合中所有查询的所有行。

通过使用JOIN ,您可以根据表之间的逻辑关系从两个或多个表中检索数据。 连接指示 SQL 应如何使用一个表中的数据来选择另一个表中的行。

UNION 操作不同于使用组合来自两个表的列的 JOIN。

联合示例:

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为真的所有行。

您可能会看到两者的相同示意图解释,但这些完全令人困惑。

对于联合:

在此处输入图像描述

对于加入:

在此处输入图像描述

联接和联合可用于组合来自一个或多个表的数据。 不同之处在于数据的组合方式。

简单来说, 连接将数据组合到新列中 如果将两个表连接在一起,则第一个表中的数据将显示在同一行中第二个表的列旁边的一组列中。

联合将数据组合成新行。 如果两个表一起“联合”,则第一个表中的数据位于一组行中,而第二个表中的数据位于另一个表中。 行的结果相同。

这是一个连接的视觉描述。 表A和B的列组合成一个结果。

在此输入图像描述

结果中的每一行都包含BOTH表A和B中的列。当一个表中的列与另一个表中的列匹配时,将创建行。 此匹配称为连接条件。

这使得联接非常适合查找值并将其包含在结果中。 这通常是非规范化(反转规范化)的结果,并涉及在一个表中使用外键来通过在另一个表中使用主键来查找列值。

现在将上述描述与联盟的描述进行比较。 在联合中,结果中的每一行都来自一个表或另一个表。 在联合中,不会组合列来创建结果,而是组合行。

在此输入图像描述

连接和联合都可用于将来自一个或多个表的数据组合成单个结果。 他们两个都是不同的方式。 虽然联接用于组合来自不同表的列,但联合用于组合行。

资源

加入:

连接用于显示来自不同表的具有相同或不同名称的列。 显示的输出将单独显示所有列。 也就是说,列将彼此相邻对齐。

联盟:

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

它们是完全不同的东西。

连接允许您关联不同表中的相似数据。

联合将两个不同查询的结果作为单个记录集返回。

Union 使两个查询看起来像一个。 连接用于在单个查询语句中检查两个或多个表

联接和联合可用于组合来自一个或多个表的数据。 不同之处在于数据的组合方式。

简单来说,连接将数据组合到新列中。 如果将两个表连接在一起,则第一个表中的数据将显示在一组列中,与第二个表的列在同一行中。

联合将数据组合成新行。 如果两个表“联合”在一起,则第一个表中的数据在一组行中,而第二个表中的数据在另一组中。 这些行的结果相同。

请记住,联合将合并结果(肯定是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

ID,值,ID,值

1,3,1,3

联合运算是行的垂直聚合的组合结果,联合运算是列的水平聚合的组合结果。

  1. SQL JOIN 子句用于合并数据库中两个或多个表的记录。 JOIN 是一种通过使用每个表共有的值来组合两个表中的字段的方法。

  2. SQL UNION 运算符组合了两个或多个 SELECT 语句的结果。 UNION 中的每个 SELECT 语句必须具有相同数量的列。 这些列还必须具有相似的数据类型。 此外,每个 SELECT 语句中的列的顺序必须相同。

例如:表一客户/表二订单

内部联接:

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
FROM CUSTOMERS

RIGHT JOIN ORDERS

ON CUSTOMERS.ID = ORDERS.CUSTOMER_ID; 

UNION 运算符仅用于组合两个或多个 SELECT 语句。

而 JOIN 用于从每个表中选择行,可以通过内部、外部、左侧或右侧方法。

请参阅此处此处 有一个更好的例子解释。

使用 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

使用 JOIN

JOIN,您可以根据表之间的逻辑关系从两个或多个表中检索数据。

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

在摘要中,它们是相似的,因为正在合并两个表或结果集,但 UNION 实际上用于将具有相同列数的结果集与具有相似数据类型的列合并。 STRUCTURE 相同,只是添加了新行。

在连接中,您可以将表/结果集与任何可能的结构组合在一起,包括没有共享/相似列的笛卡尔连接。

我喜欢将一般差异视为:

  • JOINS 连接表
  • UNION (et all) 组合查询。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM