UNION和UNION ALL之间的区别是什么?
当前回答
UNION和UNION ALL都连接两个不同SQL的结果。它们处理重复项的方式不同。
UNION对结果集执行DISTINCT,消除所有重复的行。UNION ALL不删除重复项,因此它比UNION更快。
注意:使用此命令时,所有选定的列都需要具有相同的数据类型。
示例:如果我们有两个表,1)员工和2)客户
员工表数据:
客户表数据:
UNION示例(它删除所有重复记录):
UNION ALL示例(它只是连接记录,而不是消除重复,因此比UNION更快):
其他回答
如果没有ORDERBY,UNION ALL可能会按原样返回行,而UNION则会让您等到查询的最后一刻,然后立即向您提供整个结果集。这在超时情况下会有所不同——UNION ALL会保持连接的活动状态。
因此,如果您有超时问题,并且没有排序,重复也不是问题,UNION ALL可能会非常有用。
UNION和UNION ALL都连接两个不同SQL的结果。它们处理重复项的方式不同。
UNION对结果集执行DISTINCT,消除所有重复的行。UNION ALL不删除重复项,因此它比UNION更快。
注意:使用此命令时,所有选定的列都需要具有相同的数据类型。
示例:如果我们有两个表,1)员工和2)客户
员工表数据:
客户表数据:
UNION示例(它删除所有重复记录):
UNION ALL示例(它只是连接记录,而不是消除重复,因此比UNION更快):
在ORACLE:UNION不支持BLOB(或CLOB)列类型,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中都有重复的行!
推荐文章
- 如何在不知道其名称的情况下删除SQL默认约束?
- SQL语法区分大小写吗?
- MySQL工作台:如何保持连接活动
- 左连接与Where子句
- 如何使用实体框架只更新一个字段?
- 在表变量上创建索引
- 为什么历史上人们使用255而不是256作为数据库字段大小?
- 如何选择记录从过去24小时使用SQL?
- 如何为查询返回的每一行执行存储过程一次?
- 按IN值列表排序
- 如何使用SQL Server 2008做多个CASE WHEN条件?
- 计数在VARCHAR字段中字符串的出现次数?
- 如何选择多行填充常量?
- 修改一个MySQL列为AUTO_INCREMENT
- 如果没有使用EXISTS引入子查询,则只能在选择列表中指定一个表达式