在集合论中,两个集合(记为集合A和B)的并集是一个包含集合A和B中所有元素的集合。换句话说,如果一个元素属于任何一个输入集合,那么它也属于结果集。

在T-SQL中,UNION 集合运算可以将两个输入查询的结果集组合成一个结果集。如果一个行在任何一个输入集合中出现,它也会在UNION运算的结果中出现。T-SQL 支持在UNION集合运算中使用UNION ALL 和UNION(隐含DISTINCT,DISTINCT不能显示指定)选项。

UNION ALL 集合运算

对于作为运算的输入查询而生成的多集,UNION ALL 集合运算返回在输入的多集中出现的所有行,它实际上不会对行进行比较,也不会删除重复行。假设查询Query1返回m行,查询Query2返回n行,则Query1 UNION ALL Query2 返回(m+n)行。

SELECT c FROM a

UNION ALL

SELECT c FROm b

注意:因为UNION ALL 不会删除重复行,所以它的结果是多集,而不是真正的集合。相同的行在结果中可能出现多次。

UNION DISTINCT 集合运算

从逻辑处理过程来看,UNION(隐含 DISTINCT)集合运算通过删除重复记录,可以把两个输入的多集转变成一个集合,这个返回的集合中包含两个输入集中的所有行。

注意:如果两个输入集中包含相同的行,则该行在结果中只出现一次;换句话说,运算结果是一个真正的集合,而不是多集。

从物理处理过程来看,SQL Server 不一定必须先删除输入多集中的重复行,再进行集合运算。相反,它可以先把两个多集组合在一起,然后再删除重复行。

那么,什么时候应该使用 UNION ALL ,什么时候应该使用 UNION呢?如果在集合运算合并两个输入集以后可能存在重复行,但要返回互不相同的行,则使用 UNION 。如果在合并两个输入集以后不可能会出现重复行,那么这时UNION和UNION ALL 在逻辑上是等价的。不过,对于这种情况,建议使用UNION ALL,这样可避免SQL Server 为检查重复行而带来的额外开销。

最新文章

  1. vue 2.0 开发实践总结之疑难篇
  2. Java基础常见英语词汇
  3. Leetcode 200. number of Islands
  4. 剑指offer系列35----序列化二叉树
  5. C#调用webService的几种方法
  6. C# - Excel - Microsoft Access 数据库引擎找不到对象
  7. HTML&CSS基础学习笔记1.2-HTML的全局属性?
  8. (摘)DataGuard物理standby管理 - 主备切换
  9. mysql事件调度器功能
  10. eclipse创建Maven父子结构Maven项目
  11. python的w+到底是什么
  12. IOS常见的加密方法,常用的MD5和Base64
  13. 【转】Linux下查看系统配置
  14. better-scroll项目中遇到的问题
  15. 自动检测SOCKET链接断开
  16. mysql高可用架构 -> MHA主从复制-03
  17. Poco::File
  18. asp.net写日志权限问题
  19. memcached分布式部署
  20. python数据处理

热门文章

  1. web.xml的简单解释以及Hello1中web.xml的简单分析
  2. java混淆工具Jocky和Proguard
  3. Oracle 学习之:ASCII,CHR函数的作用和用法
  4. 【Jsp,Servlet初学总结】 含 cookie和session的使用
  5. Ajax实现跨域访问最新方式
  6. centos7安装mysql5.7.19及配置远程连接
  7. Codeforces Round #354 (Div. 2)-C. Vasya and String,区间dp问题,好几次cf都有这种题,看来的好好学学;
  8. mysqldump快速导数据
  9. [TJOI2010]中位数
  10. Web App 响应式页面制作 笔记整理