UNION和UNION ALL之间的区别是什么?


当前回答

UNION会删除重复记录,而UNION ALL则不会。但是需要检查要处理的大量数据,并且列和数据类型必须相同。

由于union内部使用“不同”行为来选择行,因此在时间和性能方面成本更高。喜欢

select project_id from t_project
union
select project_id from t_project_contact  

这给了我2020年的记录

另一方面

select project_id from t_project
union all
select project_id from t_project_contact

给我超过17402行

从优先级角度看,两者具有相同的优先级。

其他回答

UNION和UNION ALL都连接两个不同SQL的结果。它们处理重复项的方式不同。

UNION对结果集执行DISTINCT,消除所有重复的行。UNION ALL不删除重复项,因此它比UNION更快。

注意:使用此命令时,所有选定的列都需要具有相同的数据类型。

示例:如果我们有两个表,1)员工和2)客户

员工表数据:

客户表数据:

UNION示例(它删除所有重复记录):

UNION ALL示例(它只是连接记录,而不是消除重复,因此比UNION更快):

还有一件事我想补充-

并集:-结果集按升序排序。

全部合并:-结果集未排序。两个查询输出只是附加的。

联合,联合UNION命令用于从两个表中选择相关信息,非常类似于JOIN命令。但是,在使用UNION命令时,所有选定的列都需要具有相同的数据类型。使用UNION,仅选择不同的值。

联合所有人UNION ALL命令与UNION命令相同,但UNION ALL选择所有值。

Union和Union all的区别在于Union all不会消除重复的行,相反,它只是从所有符合查询细节的表中提取所有行,并将它们组合到一个表中。

UNION语句有效地对结果集执行SELECT DISTINCT。如果您知道从联合返回的所有记录都是唯一的,请改用union all,这样可以更快地获得结果。

重要的Oracle和Mysql之间的区别:假设t1和t2之间没有重复的行,但它们各自有重复的行。示例:t1从2017年开始销售,t2从2018年开始销售

SELECT T1.YEAR, T1.PRODUCT FROM T1

UNION ALL

SELECT T2.YEAR, T2.PRODUCT FROM T2

在ORACLE UNION ALL中,从两个表中获取所有行。MySQL中也会发生同样的情况。

然而:

SELECT T1.YEAR, T1.PRODUCT FROM T1

UNION

SELECT T2.YEAR, T2.PRODUCT FROM T2

在ORACLE中,UNION从两个表中提取所有行,因为t1和t2之间没有重复的值。另一方面,在MySQL中,结果集的行数将更少,因为表t1和表t2中都有重复的行!

在这里的讨论中添加我的两分钱:可以将UNION运算符理解为纯的、面向SET的UNION-例如,集合a={2,4,6,8},集合B={1,2,3,4},UNION B={1,2,4,6,8}

在处理集合时,您不希望数字2和4出现两次,因为元素在集合中或不在集合中。

然而,在SQL世界中,您可能希望将两个集合中的所有元素放在一个“包”中{2,4,6,8,1,2,3,4}。为此,T-SQL提供了运算符UNION ALL。