UNION和UNION ALL之间的区别是什么?
当前回答
我补充一个例子,
UNION,它与不同-->的合并速度较慢,因为它需要比较(在Oracle SQL开发人员中,选择查询,按F10查看成本分析)。
UNION ALL,它在合并时没有明显的-->,速度更快。
SELECT to_date(sysdate, 'yyyy-mm-dd') FROM dual
UNION
SELECT to_date(sysdate, 'yyyy-mm-dd') FROM dual;
and
SELECT to_date(sysdate, 'yyyy-mm-dd') FROM dual
UNION ALL
SELECT to_date(sysdate, 'yyyy-mm-dd') FROM dual;
其他回答
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和UNION ALL的区别在于UNION将省略重复记录,而UNION ALL将包含重复记录。
联合结果集按升序排序,而联合所有结果集不排序
UNION对其结果集执行DISTINCT,以便消除任何重复的行。而UNION ALL不会删除重复项,因此它比UNION更快*
注意:UNION ALL的性能通常会优于UNION,因为UNION需要服务器执行删除任何重复项的额外工作。因此,如果确定不会有任何重复项,或者有重复项不是问题,出于性能原因,建议使用UNION ALL。
联合,联合UNION命令用于从两个表中选择相关信息,非常类似于JOIN命令。但是,在使用UNION命令时,所有选定的列都需要具有相同的数据类型。使用UNION,仅选择不同的值。
联合所有人UNION ALL命令与UNION命令相同,但UNION ALL选择所有值。
Union和Union all的区别在于Union all不会消除重复的行,相反,它只是从所有符合查询细节的表中提取所有行,并将它们组合到一个表中。
UNION语句有效地对结果集执行SELECT DISTINCT。如果您知道从联合返回的所有记录都是唯一的,请改用union all,这样可以更快地获得结果。
UNION ALL还可以处理更多的数据类型。例如,当尝试联合空间数据类型时。例如:
select a.SHAPE from tableA a
union
select b.SHAPE from tableB b
将投掷
数据类型几何图形不能用作UNION、INTERSECT或EXCEPT运算符的操作数,因为它不可比较。
然而,工会都不会。
(来自Microsoft SQL Server联机丛书)
联合[所有]
指定将多个结果集合并并作为单个结果集返回。
ALL
将所有行合并到结果中。这包括重复项。如果未指定,将删除重复的行。
如果对结果应用类似DISTINCT的重复行查找,UNION将花费太长时间。
SELECT * FROM Table1
UNION
SELECT * FROM Table2
相当于:
SELECT DISTINCT * FROM (
SELECT * FROM Table1
UNION ALL
SELECT * FROM Table2) DT
对结果应用DISTINCT的副作用是对结果进行排序操作。
UNION ALL结果将显示为结果上的任意顺序,但UNION结果将显示成order BY 1,2,3。。。,n(n=表的列数)应用于结果。当没有任何重复行时,可以看到这种副作用。
推荐文章
- GROUP BY with MAX(DATE)
- 删除id与其他表不匹配的sql行
- 等价的限制和偏移SQL Server?
- 为什么我不能在DELETE语句中使用别名?
- 在SQL Server Management Studio中保存带有标题的结果
- "where 1=1"语句
- 如何选择一个记录和更新它,与一个单一的查询集在Django?
- 多语句表值函数vs内联表值函数
- 如何从Oracle的表中获取列名?
- NOLOCK提示在SELECT语句中的作用
- SQL OVER()子句-它什么时候有用,为什么有用?
- 如果字段在MySQL中为空,则返回0
- 我如何使用ROW_NUMBER()?
- SQL或者TSQL是图灵完备的吗?
- 如何检查表上持有哪些锁