JOIN和UNION有什么区别?

时间:2009-05-25 04:55:16

标签: sql database join union

JOINUNION之间有什么区别?我能举个例子吗?

16 个答案:

答案 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)

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

对于UNION:

Enter image description here

对于JOIN:

Enter image description here

答案 3 :(得分:40)

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

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

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

以下是连接的可视化描述。表A和B的列合并为一个结果。

enter image description here

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

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

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

enter image description here

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

Source

答案 4 :(得分:38)

JOIN:

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

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

答案 5 :(得分:20)

他们完全不同。

join允许您将不同表格中的类似数据关联起来。

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

答案 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)

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

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

请参阅herehere 。通过示例有一个更好的解释。

答案 12 :(得分:-1)

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

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

答案 13 :(得分:-1)

联合操作是垂直行汇总的合并结果, 联合操作是水平列汇总的合并结果。

答案 14 :(得分:-1)

JOIN 和 UNION 做不同的事情。

JOIN 用于通过基于某种数据关系连接列来横向创建表。以更易于理解和更有意义的方式呈现数据。

UNION 垂直用于“连接/扩展”表中的数据。要使用 UNION,您需要确保在每个数据集中选择相同的列号,并且它们确实具有相同的数据类型。

enter image description here

JOIN 用于通过链接特定列来连接表数据。您可以使用内连接或外连接来控制返回的数据集范围。

enter image description here

enter image description here

enter image description here

UNION、UNION ALL、EXCEPT、INTERSECT 的工作原理

enter image description here

答案 15 :(得分:-2)

我喜欢认为一般区别在于:

  • 加入联接表
  • UNION(全部)组合查询。