JOIN 和 UNION 有啥区别?
Posted
技术标签:
【中文标题】JOIN 和 UNION 有啥区别?【英文标题】:What is the difference between JOIN and UNION?JOIN 和 UNION 有什么区别? 【发布时间】:2010-10-28 16:04:01 【问题描述】:JOIN
和 UNION
有什么区别?可以举个例子吗?
【问题讨论】:
任何现代 DBS,例如 MariaDB,都实现了 UNION JOIN 命令。这是一个SQL 3 命令,但它并不为人所知或使用。请通过 UNION JOIN 了解更多信息。 【参考方案1】:我喜欢将一般差异视为:
JOINS 连接表 UNION(等)组合查询。【讨论】:
这引出了一个问题——join 是用“join”来提到的,而 union 是用无法解释的“combines”来提到的。无论如何,您认为除了其他高票数的 10 年前答案之外,您还会添加什么使这个“有用”? (修辞。)查看投票箭头鼠标悬停文本。【参考方案2】:联合操作是行的垂直聚合的组合结果, Union Operation 是 Horizontal 列聚合的组合结果。
【讨论】:
【参考方案3】:使用 UNION
UNION 将两个或多个查询的结果组合成一个结果集,其中包括属于联合中所有查询的所有行。
联合示例: 选择 121 作为 [列 1]、221 作为 [列 2] 联盟 选择 321 作为 [列 1]、422 作为 [列 2] 输出: 列 1 列 2 ------------------ 121 221 321 422使用 JOIN
JOIN,可以根据表之间的逻辑关系从两个或多个表中检索数据。
加入示例: SELECT a.Column1, b.Column2 从 TblA a INNER JOIN TblB b ON a.Id = b.id【讨论】:
【参考方案4】: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)
【讨论】:
@Alex Martelli 的答案几乎是完美的,如果它依靠笛卡尔积的概念(我不得不抬头理解它的含义)不太简洁【参考方案5】:联合使两个查询看起来像一个。连接用于在单个查询语句中检查两个或多个表
【讨论】:
【参考方案6】:联接和联合可用于组合来自一个或多个表的数据。不同之处在于数据的组合方式。
简单来说,联接将数据组合到新列中。如果将两个表连接在一起,则第一个表中的数据显示在一组列中,与第二个表的列在同一行中。
联合将数据组合成新行。如果两个表“合并”在一起,则第一个表中的数据在一组行中,第二个表中的数据在另一组中。这些行的结果相同。
【讨论】:
【参考方案7】:UNION 运算符仅用于组合两个或多个 SELECT 语句。
而 JOIN 用于从每个表中选择行,可以通过内部、外部、左侧或右侧方法。
请参阅here 和here 。有更好的例子解释。
【讨论】:
【参考方案8】:您可能会看到相同的示意图解释,但这些完全令人困惑。
对于联合:
对于加入:
【讨论】:
这些图片暗示FULL OUTER JOIN
与UNION
相同,do have differences
这个答案指出这些图像令人困惑(它们是哪个 IMO),但没有继续解释原因或对原始问题提供任何澄清。
每张带有图表的图片都完美地说明了情况。没有一个图像可以合并所有图表。那会更混乱。【参考方案9】:
加入:
连接用于显示具有相同或 来自不同表的不同名称。显示的输出 将单独显示所有列。那就是 列将彼此相邻对齐。
联合:
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
【讨论】:
【参考方案10】:它们是完全不同的东西。
join 允许您关联不同表中的相似数据。
联合将两个不同查询的结果作为单个记录集返回。
【讨论】:
【参考方案11】:记住联合会合并结果(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
【讨论】:
这是按照ANSI标准,UNION ALL不合并结果 另见UNION
与UNION ALL
***.com/questions/49925/…【参考方案12】:
在摘要中,它们是相似的,因为正在合并两个表或结果集,但 UNION 实际上是用于将具有相同列数的结果集与具有相似数据类型的列合并。 STRUCTURE 相同,只是添加了新行。
在联接中,您可以将表/结果集与任何可能的结构组合在一起,包括没有共享/相似列的笛卡尔联接。
【讨论】:
【参考方案13】:1。 SQL Joins 子句用于组合数据库中两个或多个表的记录。 JOIN 是一种通过使用每个表共有的值来组合两个表中的字段的方法。
2。 SQL UNION 运算符组合了两个或多个 SELECT 语句的结果。 UNION 中的每个 SELECT 语句必须具有相同数量的列。这些列还必须具有相似的数据类型。此外,每个 SELECT 语句中的列的顺序必须相同。
例如: 表 1 客户/表 2 订单
内连接:
选择 ID、姓名、金额、日期
来自客户
内部连接订单
ON CUSTOMERS.ID = ORDERS.CUSTOMER_ID;
联合:
选择 ID、姓名、金额、日期
来自客户
左连接命令
ON CUSTOMERS.ID = ORDERS.CUSTOMER_ID
联合
选择 ID、姓名、金额、日期 来自客户
正确的加入订单
ON CUSTOMERS.ID = ORDERS.CUSTOMER_ID;
【讨论】:
【参考方案14】:UNION 将两个或多个查询的结果组合成一个结果集,其中包含属于联合中所有查询的所有行。
通过使用JOINs,您可以根据表之间的逻辑关系从两个或多个表中检索数据。连接指示 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
为真的所有行。
【讨论】:
Join 可以从一个*或多个表中检索数据。不一定是两个以上是关于JOIN 和 UNION 有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章
left join ,right join ,inner join,outer join,union all,union有啥区别?怎么用?