本文主要详细介绍sql server交集和差集的用法。通过示例代码详细介绍,对大家的学习或工作有一定的参考价值。有需要的朋友下面跟边肖学习。
概述
为什么使用集合运算:
它比连接查询更方便,在集合运算中存在/不存在。
并集运算(UNION)
并集:两个集合的并集是包含集合A和b中所有元素的集合。
在T-SQL中。UNION操作可以将两个输入查询的结果组合成一个结果集。注意:如果某一行出现在任何输入集中,它也会出现在UNION运算的结果中。T-SQL支持以下两个选项:
(1)UNION ALL:不会删除重复行
-联合全选
人力资源员工所在的国家、地区和城市
联合所有
从销售中选择国家、地区、城市。客户;
(2)UNION:会删除重复行
-工会
从人力资源员工中选择国家/地区
联盟
从销售中选择国家、地区。客户;
交集运算(INTERSECT)
交集:两个集合(集合A和集合B)的交集是由同时属于A和B的所有元素组成的集合。
在T-SQL中,INTERSECT set操作取两个输入查询结果的交集,并且只返回在两个查询结果集中出现的行。
交集操作首先在逻辑上删除两个输入集中的重复行,然后返回只在两个集中出现的行。换句话说:如果一行在两个输入集中至少出现一次,交集返回的结果将包含该行。
例如,下面返回不同的地址,这些地址既是雇员地址又是客户地址:
-互联系统
从人力资源员工中选择国家、地区、城市
横断
从销售中选择国家、地区、城市。客户;
这里需要说的是,set操作在比较行的时候,认为两个NULL值相等,所以返回行记录。
差集运算(EXCEPT)
区别:两个集合(集合A和集合B)的集合,由属于集合A但不属于集合B的所有元素组成。
在T-SQL中,集合之间的差异是通过使用EXCEPT set操作来实现的。它对两个输入查询的结果集进行操作,这些结果集将出现在第一个结果集中,但不会出现在第二个结果集中的所有行中。
EXCEPT combined operation首先在逻辑上删除两个输入集中的重复行,然后返回只出现在第一个输入集中而没有出现在第二个结果集中的所有行。换句话说,只有当一行在第一个输入集中至少出现一次,而在第二个输入集中从未出现一次时,才能返回该行。
此外,与UNION和INTERSECT相比,两个输入集的顺序会影响最终返回的结果。
例如,借助EXCEPT操作,我们可以方便地实现属于A而不属于b的场景,下面返回属于员工抵制但不属于客户地址的地址记录:
-除了
从人力资源员工中选择国家、地区、城市
除.之外
从销售中选择国家、地区、城市。客户;
集合运算优先级
SQL定义了集合运算之间的优先级:INTERSECT最高,UNION和EXCEPT相等。
也就是说,先计算交集,然后从左到右依次处理优先级相同的操作。
-设置操作的优先级
从生产中选择国家、地区、城市。供应商
除.之外
从人力资源员工中选择国家、地区、城市
横断
从销售中选择国家、地区、城市。客户;
在上面的SQL代码中,因为INTERSECT的优先级比EXCEPT高,所以INTERSECT交集操作先执行。因此,这个查询的意义是返回没有出现在员工地址和客户地址交集中的供应商地址。
集合操作的优先级
1.INTERSECTUNION=除了
2.先计算交集,然后从左到右处理相同优先级的相同操作。
3.您可以使用括号来控制set操作的优先级,set操作的优先级最高。
在sort函数的OVER语句中使用ORDER BY (SELECT constant)可以告诉SQL Server不要关心行的顺序。
使用表表达式避开不支持的逻辑查询处理
除了意外的ORDER BY之外,集合查询本身并不包含其他逻辑查询处理阶段,但是可以通过表表达式来避免。
解决方案是:首先根据包含集合运算的查询定义一个表表达式,然后在外部查询中对表表达式应用任何必要的逻辑查询处理。
(1)例如,以下查询返回每个国家不同的雇员地址或客户地址的数量:
选择国家,将(*)作为数字位置
从(从人力资源员工中选择国家、地区、城市
联盟
从销售中选择国家、地区、城市。客户)按国家分组;
(2)例如,以下查询返回最近由雇员地址为3或5的雇员处理的两个订单:
选择员工id、订单id、订单日期
from (select top (2) empid,orderid,orderdate
来自销售部。命令
其中empid=3
订单按订单日期desc,订单id desc)为D1
联合所有
选择员工id、订单id、订单日期
from (select top (2) empid,orderid,orderdate
来自销售部。命令
其中empid=5
订单按订单日期desc,订单id desc)为D2;
关于sql server交集和差异的这篇文章到此为止。有关sql server交集和差异的更多信息,请搜索我们以前的文章或继续浏览下面的相关文章。希望你以后能支持我们!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。