JOIN和UNION有什么区别?

Gol*_*old 240 sql database union join

JOIN和之间有什么区别UNION?我能举个例子吗?

Ale*_*lli 290

UNION将查询中的行放在彼此之后,同时JOIN生成笛卡尔积和子集 - 完全不同的操作.琐碎的例子UNION:

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

类似的简单例子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)
Run Code Online (Sandbox Code Playgroud)

  • @Alex Martelli 的答案几乎是完美的,如果它不是太简洁的话,依赖于笛卡尔积的概念(我必须查一下才能理解它的含义) (8认同)
  • 你能告诉我什么是`UNION-JOIN`我怎样才能在标准SQL中实现它?Maria DB有一个命令`union join`,但其他数据库没有.谢谢. (6认同)

Kir*_*tan 59

UNION将两个或多个查询的结果合并到一个结果集中,该结果集包括属于联合中所有查询的所有行.

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

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

UNION示例:

SELECT 1 AS [Column1], 2 AS [Column2]
UNION
SELECT 3 AS [Column1], 4 AS [Column2]
Run Code Online (Sandbox Code Playgroud)

输出:

Column1    Column2
-------------------
1          2
3          4
Run Code Online (Sandbox Code Playgroud)

加入示例:

SELECT a.Column1, b.Column2 FROM TableA a INNER JOIN TableB b ON a.Id = b.AFKId
Run Code Online (Sandbox Code Playgroud)

这将输出条件a.Id = b.AFKId为true的两个表中的所有行.


Hum*_*mad 53

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

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

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

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

在此输入图像描述

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

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

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

在此输入图像描述

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

资源

  • 这是一个很棒的视觉示例.我非常肯定我在其他答案之后理解了,但这完全清除了它. (4认同)

Jav*_*ain 50

您可能会看到两者的相同原理图说明,但这些都完全令人困惑.

对于UNION:

在此输入图像描述

对于JOIN:

在此输入图像描述

  • 这些图像暗示"FULL OUTER JOIN"与`UNION`相同,[有差异](https://social.msdn.microsoft.com/Forums/sqlserver/en-US/cb8fed73-c134-46ef- aff8-7d4ea57a1033 /差之间的工会,全和全外连接?论坛= TRANSACTSQL) (9认同)
  • 这个答案指出这些图像令人困惑(它们是 IMO),但没有继续解释原因或对原始问题提供任何澄清。 (2认同)

小智 40

加入:

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

联盟:

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
Run Code Online (Sandbox Code Playgroud)

现在,为了执行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
Run Code Online (Sandbox Code Playgroud)

这是一个加入.

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
Run Code Online (Sandbox Code Playgroud)


小智 21

他们是完全不同的东西.

一个加盟让您在不同的表中涉及的类似数据.

union将两个不同查询的结果作为单个记录集返回.


Jam*_*s L 9

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


小智 6

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

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

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