数据库-差集交集并集
数据库-差集交集并集
[toc]
图示
一、并集运算(UNION)
并集:两个集合的并集是一个包含集合A和B中所有元素的集合。
在T-SQL中,UNION集合运算可以将两个输入查询的结果组合成一个结果集。
需要注意的是:如果一个行在任何一个输入集合中出现,它也会在UNION运算的结果中出现。T-SQL支持以下两种选项
1、保留重复行
select country, region, city from hr.Employees
union all
select country, region, city from sales.Customers;
2、去除重复行
select country, region from hr. Employees
union
select country, region from sales.Customers;
二、交集返算(INTERSECT)
交集:两个集合(集合A和集合B)的交集是由既属于A,也属于B的所有元素組成的集合。
在T-SQL中,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的场景,下面返回属于员工地址,但不属于客户地址的地址记录:
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交集运算。因此,这个查询的含义是:返回没有出现在员工地址和客户地址交集中的供应商地址。
四、集合运算的优先级
INTERSECT > UNION = EXCEPT
首先计算INTERSECT然后从左到右的出现顺序依次处理优先级的相同的运算。
可以使用圆括号控制集合运算的优先级,它具有最高的优先级。
在排序函数的OVER字句中使用ORDER BY ( SELECT <常量> )可以告诉sql server不必在意行的顺序。
使用表达式避开不支持的逻辑查询处理
集合运算查询本身并不持之除ORDER BY以外的其他逻辑查询处理阶段,但可以通过表表达式来避开这一限制。
解决方案就是:首先根据包含集合运算的查询定义一个表达式,然后在外部查询中对表达式应用任何需要的逻辑查询
处理。
(1)例如,下面的查询返回每个国家中不同的员工地址或客户地址的数量:
select country, COUNT(*) as numlocations
from (select country, region, cityfrom hr.Employeesunionselect country, region, cityfrom sales.Customers) as U
group by country;
(2)例如,下面的查询返回由员工地址为3或5的员工最近处理过的两个订单:
select empid, orderid, orderdate
from (select top (2) empid, orderid, orderdatefrom sales.Orderswhere empid = 3order by orderdate desc, orderid desc) as D1
union all
select empid, orderid, orderdate
from (select top (2) empid, orderid, orderdatefrom sales.Orderswhere empid = 5order by orderdate desc, orderid desc) as D2;
数据库-差集交集并集相关推荐
- mysql数据库取交集_不同数据库取并集、交集、差集
一.并集: 需求:汇总t1.t2两表的数据 mysql.postgresql.oracle数据库取并集都是用union/union all关键字,不再赘述 二.交集: 需求:选出既在t1表又在t2表的 ...
- java 求交集 算法_Java计算交集,差集,并集的方法示例
Java计算交集,差集,并集的方法示例 发布时间:2020-10-07 10:37:46 来源:脚本之家 阅读:106 作者:benbenkui 本文实例讲述了Java计算交集,差集,并集的方法.分享 ...
- php 队列取并集,PHP实现对数组简单求交集,差集,并集功能示例
php 的 PHP实现对数组简单求交集,差集,并集功能示例 本文实例讲述了PHP实现对数组简单求交集,差集,并集功能.分享给大家供大家参考,具体如下: $arr1 = array( '0' => ...
- 求两个Linux文本文件的交集、差集、并集
一.交集 sort a.txt b.txt | uniq -d 二.并集 sort a.txt b.txt | uniq 三.差集 a.txt-b.txt:sort a.txt b.txt b.txt ...
- lambda 对象去重_采用java8 lambda表达式 实现 java list 交集 并集 差集 去重复并集...
采用java8 lambda表达式 实现java list 交集/并集/差集/去重并集 一般的javaList 交.并集采用简单的 removeAll retainAll 等操作,不过这也破坏了原始的 ...
- Java求两个数组的交集、差集、并集
目录 Java求两个数组的并集,代码如下: Java求两个数组的交集,代码如下: Java求两个数组的差集,代码如下: 交集.差集.并集测试代码如下: Java求两个数组的并集,代码如下: /*** ...
- java实现交集并集差集
java实现交集并集差集 ***`package 第一次模拟测试; import java.util.ArrayList; import java.util.HashSet; import java. ...
- 利用shell求取两个文件的交集、差集、并集等
求文件行数 cat a.txt | wc -l 交集 sort a.txt b.txt | uniq -d 并集 sort a.txt b.txt | uniq 差集 (1) a.txt-b.txt ...
- java求集合的交集、差集和并集
一.本文介绍两种写法 1原生写法 2com.google.guava写法 <dependency> <groupId>com.google.guava</grou ...
最新文章
- ElasticSearch性能优化策略【转】
- Swift extension 扩展实用Tips
- 微信多开txt_微信仅需3步操作,就能多开登录?手把手包教包会
- Cognos 云最佳实践: 调整架构提供性能和可伸缩性
- ios 学习札记 细节(三)
- 安装mysql8._安装MySQL8(附详细图文)
- 散点画三维曲面图_UG 复杂曲面合金零件的数控加工
- php内核一 一次请求与结束
- 读读objc源码(二):weak类型指针的实现
- stm32f103c8t6最小系统电路原理图_嵌入式单片机之STM32F103C8T6最小系统板电路设计参考...
- (17)VHDL实现编码器
- 猫都能学会的Unity3D Shader入门指南(一)
- 【读书笔记】Java基础学习之目录
- VCAP5-DCA – What’s new?
- 从△走进OO,走进策略模式
- linux优化deepin启动速度,如何优化 Deepin 引导开机速度?
- w ndows7与windows10区别,windows7和10区别
- 拓嘉启远:拼多多月卡有哪两种?如何区别
- 数据的导出Excel表
- python3基础系列之六【输入输出file方法】