T-Sql之集合

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。例如:

1 SELECT * FROM (SELECT TOP ( 1 ) jm.*
2 FROM    dbo.JM_FutureIncomeSource jm
3 LEFT JOIN dbo.v_FY_Room rm ON  rm.RoomNO = jm.RoomNo
4 WHERE   rm.ZoneID = '410105' AND jm.RemainingMonths BETWEEN 30 AND 36 AND jm.FutureIncome>20000  ORDER BY  rm.CreateDate ASC ) a
5 UNION ALL
6 SELECT * FROM    (SELECT TOP ( 1 )  jm.*
7 FROM    dbo.JM_FutureIncomeSource jm
8 LEFT JOIN dbo.v_FY_Room rm ON  rm.RoomNO = jm.RoomNo
9 WHERE   rm.ZoneID = '410105' 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形式)

1 SELECT 6 AS age
2 INTERSECT   
3 SELECT 6 AS age

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

6、集合运算的优先级

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

转载于:https://www.cnblogs.com/MirZhai/p/10158405.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值