1、知识点

先了解一下集合概念,集合运算(UNION(并)、EXCEPT(补)、INTERSECT(交))是指表之间的垂直操作。区别联接(CROSS,INNER、OUTER)是指表之间的水平操作,基础知识:笛卡尔积,对多个表执行联接操作所得到的虚拟表包含这两个表的所有列。

今天我们主要来说集合运算。

UNION运算返回俩个输入中的行的并集;EXCEPT返回在第一个输入中出现但在第二个输入中没有出现的行;INTERSECT返回在俩个输入中都出现的行。

2、union和union all

a.集合运算的时候不支持使用可选DISTINCT,因为没有指定all时,DISTINCT是隐含的。

b.集合运算的俩个输入必须具备相同的列数,而且相应列必须可以相同的数据类型,或者至少可以隐式的转换,列的名称由第一个输入决定。

c.在单独的表,表达式不允许使用order by 子句,支持所有其他的逻辑处理(联接,筛选,分组)

d.对于集合运算的最终结果,order by 是唯一允许对其直接进行操作的逻辑处理阶段。

在我们处理数据的时候,需要将多个sql结果合并起来,这个时候就需要用到union和union all。例如:

 SELECT * FROM (SELECT TOP ( 1 ) jm.*
FROM dbo.JM_FutureIncomeSource jm
LEFT JOIN dbo.v_FY_Room rm ON rm.RoomNO = jm.RoomNo
WHERE rm.ZoneID = '' AND jm.RemainingMonths BETWEEN 30 AND 36 AND jm.FutureIncome>20000 ORDER BY rm.CreateDate ASC ) a
UNION ALL
SELECT * FROM (SELECT TOP ( 1 ) jm.*
FROM dbo.JM_FutureIncomeSource jm
LEFT JOIN dbo.v_FY_Room rm ON rm.RoomNO = jm.RoomNo
WHERE rm.ZoneID = '' AND jm.RemainingMonths BETWEEN 58 AND 63 AND jm.FutureIncome>20000 ORDER BY rm.CreateDate ASC )b

sql格式 

[SQL 语句 1]
UNION(all)
[SQL 语句 2]

3、union和union all的区别

union 不带all,隐式带distinct,并在结果上应用distinct(删除重复行)

union all 是没有删除重复行的union。

4、EXCEPT (补)

ecxept 返回在第一个输入中出现,第二输入没有出现的不重复行。

返回在employees出现的城市,但是没有在customers出现的

5、INTERSECT(交)

返回在俩个输入中都出现的行(支持隐含distinct形式)

 SELECT 6 AS age
INTERSECT
SELECT 6 AS age

性能分析,可以看出顶部输入扫描和底部输入扫描匹配开销最大。

6、集合运算的优先级

INTERSECT集合运算比其他集合运算的优先级更高,最先执行INTERSECT,但是可以依靠圆括号来控制逻辑顺序。

最新文章

  1. BOM以及定时器
  2. 《In Search of an Understandable Consensus Algorithm》翻译
  3. TortoiseSVN提交文件的时候卡死
  4. HDU 5382 莫比乌斯反演
  5. python学习笔记(Tkinter编程利用Treeview实现表格自动更新)
  6. 怎样从Hadoop安全模式中进入正常模式
  7. network: Android 网络推断(wifi、3G与其它)
  8. Fizzler
  9. KnockOut文档--模板绑定
  10. 常用的HTTP方法
  11. 【NO.11】Jmeter - 构建1个可供Linux使用的Jmeter测试脚本 - 共3个步骤
  12. PHP可以通过类名调用非静态方法
  13. ACM 第十一届 河南省省赛A题 计划日
  14. Mysql 中的MVCC原理,undo日志的依赖
  15. 20165312 2017-2018-2《JAVA程序设计》第7周学习总结
  16. java:根据利润表计算奖金所得
  17. 深入浅出MFC——MFC骨干程序(四)
  18. spring boot 使用静态资源
  19. mysql-cluster 7.3.5安装部署
  20. css position定位详解

热门文章

  1. uva-10596-欧拉回路
  2. Spring Cloud Eureka高可用落地实战
  3. centos7 配置dns服务器
  4. SpringAop及拦截器
  5. 九度oj-1533 最长上升子序列 (LIS)
  6. unity animation readonly 无法加事件?
  7. 如何查看服务器(linux系统)当前的负载信息(转)
  8. 数据挖掘中ID3算法实现zz
  9. android 播放视频时切换全屏隐藏状态栏
  10. jquery中prop()和attr()的区别