sql server 交集,差集的用法详解
概述
为什么使用集合运算
在集合运算中比联接查询和EXISTS/NOT EXISTS更方便。
并集运算(UNIOn)
并集两个集合的并集是一个包含集合A和B中所有元素的集合。
在T-SQL中。UNIOn集合运算可以将两个输入查询的结果组合成一个结果集。需要注意的是如果一个行在任何一个输入集合中出现,它也会在UNIOn运算的结果中出现。T-SQL支持以下两种选项
(1)UNIOn ALL不会删除重复行
-- union allselect country, region, city from hr.Employees union all select country, region, city from sales.Customers;
(2)UNIOn会删除重复行
-- union select country, region from hr.Employees union select country, region from sales.Customers;
交集运算(INTERSECT)
交集两个集合(记为集合A和集合B)的交集是由既属于A,也属于B的所有元素组成的集合。
在T-SQL中,INTERSECT集合运算对两个输入查询的结果取其交集,只返回在两个查询结果集中都出现的行。
INTERSECT集合运算在逻辑上会删除两个输入集中的重复行,然后返回只在两个集合中中都出现的行。换句话说如果一个行在两个输入集中都至少出现一次,那么交集返回的结果中将包含这一行。
例如,下面返回既是雇员地址,又是客户地址的不同地址
-- intersect select country, region, city from hr.Employees intersect select country, region, city from sales.Customers;
这里需要说的是,集合运算对行进行比较时,认为两个NULL值相等,所以就返回该行记录。
差集运算(EXCEPT)
差集两个集合(记为集合A和集合B)的由属于集合A,但不属于集合B的所有元素组成的集合。
在T-SQL中,集合之差使用EXCEPT集合运算实现的。它对两个输入查询的结果集进行操作,反会出现在第一个结果集中,但不出现在第二个结果集中的所有行。
EXCEPT结合运算在逻辑上删除两个输入集中的重复行,然后返回只在第一个集合中出现,在第二个结果集中不出现的所有行。换句话说一个行能够被返回,仅当这个行在第一个输入的集合中至少出现过一次,而且在第二个集合中一次也没出现过。
,相比UNIOn和INTERSECT,两个输入集合的顺序是会影响到返回结果的。
例如,借助EXCEPT运算,我们可以方便地实现属于A但不属于B的场景,下面返回属于员工抵制,但不属于客户地址的地址记录
-- except select country, region, city from hr.Employees except select country, region, city from sales.Customers;
集合运算优先级
SQL定义了集合运算之间的优先级INTERSECT最高,UNIOn和EXCEPT相等。
换句话说会计算INTERSECT,然后按照从左至右的出现顺序依次处理优先级相同的运算。
-- 集合运算的优先级 select country, region, city from Production.Suppliers except select country, region, city from hr.Employees intersect select country, region, city from sales.Customers;
上面这段SQL代码,因为INTERSECT优先级比EXCEPT高,所以进行INTERSECT交集运算。,这个查询的含义是返回没有出现在员工地址和客户地址交集中的供应商地址。
集合运算的优先级
1.INTERSECT>UNIOn=EXCEPT
2.计算INTERSECT,然后从左到右的出现顺序依次处理优先级的相同的运算。
3.可以使用圆括号控制集合运算的优先级,它具有最高的优先级。
在排序函数的OVER字句中使用ORDER BY ( SELECt <常量> )可以告诉SQL Server不必在意行的顺序。
使用表表达式避开不支持的逻辑查询处理
集合运算查询本身并不持之除ORDER BY意外的其他逻辑查询处理阶段,但可以通过表表达式来避开这一限制。
解决方案就是根据包含集合运算的查询定义一个表表达式,然后在外部查询中对表表达式应用任何需要的逻辑查询处理。
(1)例如,下面的查询返回每个国家中不同的员工地址或客户地址的数量
select country, COUNT() as numlocations from (select country, region, city from hr.Employees union select country, region, city from sales.Customers) as Ugroup by country;
(2)例如,下面的查询返回由员工地址为3或5的员工最近处理过的两个订单、
select empid,orderid,orderdate from (select (2) empid,orderid,orderdate from sales.Orders here empid=3 order by orderdate desc,orderid desc) as D1 union all select empid,orderid,orderdate from (select (2) empid,orderid,orderdate from sales.Orders here empid=5 order by orderdate desc,orderid desc) as D2;
到此这篇关于sql server 交集,差集的用法详解的文章就介绍到这了,更多相关sql server 交集,差集 内容请搜索考高分网以前的文章或继续浏览下面的相关文章电脑维修网希望大家以后多多支持考高分网!
空调维修
- 我的世界电脑版运行身份怎么弄出来(我的世界
- 空调抽湿是什么意思,设置抽湿的温度有什么意
- 方太燃气灶有一个打不着火 怎么修复与排查方法
- 夏季免费清洗汽车空调的宣传口号
- 清洗完空调后出现漏水现象
- iphone6能玩什么游戏(iphone6游戏)
- 如何设置电脑密码锁屏(如何设置电脑密码锁屏
- win10删除开机密码提示不符合密码策略要求
- 电脑w7显示不是正版(w7不是正版怎么解决)
- 万家乐z8热水器显示e7解决 怎么修复与排查方法
- 1匹空调多少瓦数(1匹空调多少瓦)
- 安卓手机连接电脑用什么软件好(关于安卓手机
- 电脑网页看视频卡是什么原因(爱拍看视频卡)
- 华帝燃气灶点火器一直响然后熄火怎么办:问题
- 电脑壁纸怎么换(关于电脑壁纸怎么换的介绍)
- 冬天空调的出风口应该朝什么方向(冬天空调风