JOIN和UNION有什么区别?

问题描述 投票:222回答:15

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

sql database join union
15个回答
274
投票

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)

0
投票

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

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

例如:表1客户/表2订单

内部联接:

SELECT ID,NAME,AMOUNT,DATE

来自客户

内部联系订单

ON CUSTOMERS.ID = ORDERS.CUSTOMER_ID;

联盟:

SELECT ID,NAME,AMOUNT,DATE

来自客户

LEFT JOIN ORDERS

ON CUSTOMERS.ID = ORDERS.CUSTOMER_ID

联盟

客户的SELECT ID,NAME,AMOUNT,DATE

正确的加入订单

ON CUSTOMERS.ID = ORDERS.CUSTOMER_ID;


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

使用JOIN

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

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


-1
投票

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

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


-1
投票

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

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

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


-1
投票

Union Operation是行的Vertical Aggregate的组合结果,Union Operation是列的Horizo​​ntal Aggregate的组合结果。


-2
投票

我想将一般差异视为:

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

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为真的两个表中的所有行。


43
投票

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

对于UNION:

Enter image description here

对于JOIN:

Enter image description here


40
投票

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

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

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

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

enter image description here

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

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

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

enter image description here

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

Source


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

20
投票

他们是完全不同的东西。

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

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


9
投票

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


2
投票

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

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

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


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

© www.soinside.com 2019 - 2024. All rights reserved.