MINUS,INTERSECT,UNION浅析
转载:http://blog.csdn.net/gan690416372/article/details/5012397
SQL语句中的三个关键字:MINUS(减去),INTERSECT(交集)和UNION ALL(并集);
关于集合的概念,中学都应该学过,就不多说了.这三个关键字主要是对数据库的查询结果进行操作,正如其中文含义一样:两个查询,MINUS是从第一个查询结果减去第二个查询结果,如果有相交部分就减去相交部分;否则和第一个查询结果没有区别. INTERSECT是两个查询结果的交集,UNION ALL是两个查询的并集;

虽然同样的功能可以用简单SQL语句来实现,但是性能差别非常大,有人做过实验:made_order共23万笔记录,charge_detail共17万笔记录:
SELECT order_id FROM made_order
MINUS
SELECT order_id FROM charge_detail
耗时:1.14 sec
SELECT a.order_id FROM made_order a
WHERE a.order_id NOT exists (
SELECT order_id
FROM charge_detail
WHERE order_id = a.order_id
)
耗时:18.19 sec
性能相差15.956倍!因此在遇到这种问题的时候,还是用MINUS,INTERSECT和UNION ALL来解决问题,否则面对业务中随处可见的上百万数据量的查询,数据库服务器还不被咱玩的死翘翘?
PS:应用两个集合的相减,相交和相加时,是有严格要求的:1.两个集合的字段必须明确(用*就不行,报错);2.字段类型和顺序相同(名称可以不同),如:集合1的字段1是NUMBER,字段2是VARCHAR,那么集合2的字段1必须也是NUMBER,字段2必须是VARCHAR;3.不能排序,如果要对结果排序,可以在集合运算后,外面再套一个查询,然后排序,如前面的例子可以改成:
SELECT * FROM
(SELECT order_id FROM made_order
MINUS
SELECT order_id FROM charge_detail)
ORDER BY ORDER_ID ASC
MINUS,INTERSECT,UNION浅析的更多相关文章
- SELECT--UNION,UNION ALL,MINUS, INTERSECT,EXISTS
SELECT--UNION,UNION ALL,MINUS, INTERSECT返回两个查询结果的集合操作,两个查询结果集必须字段相同.UNION和UNION ALL并集操作,UNION并集后去掉重复 ...
- SQL语句的MINUS,INTERSECT和UNION ALL
SQL语句中的三个关键字:MINUS(减去),INTERSECT(交集)和UNION ALL(并集); 关于集合的概念,中学都应该学过,就不多说了.这三个关键字主要是对数据库的查询结果进行操作,正如其 ...
- SQLSERVER数据集合的交、并、差集运算(intersect,union,except)
SQLServer中通过intersect,union,except和三个关键字对应交.并.差三种集合运算. 他们的对应关系可以参考下面图示 测试示例: 构造A,B两个数据集 A:,,, B:,, W ...
- oracle之集合操作函数---minus、union、intersect
集合操作符专门用于合并多条select语句的结果,包括:UNION,UNION ALL,INTERSECT,MINUS.当使用集合操作函数时,需保证数据集的字段数据类型和数目一致. 使用集合操作符需要 ...
- Oracle中INTERSECT,MINUS,UNION,UNION ALL用法
intersect 就是交集minus 就是差集 交集就是两个结果集中都有的元素 比如 select uid from tb1 intersect select uid from tb2 那么既存在t ...
- oracle [union.minus.intersect]
union 两张表的相同字段的数据[记录类型和列数要一致],合并,并且去重 can replace with "in" (但是如果是两个不同的表而且没什么关联的话必须要union了 ...
- oracle 的交并差函数,intersect;union;minus。
创建表并添加数据: --创建TABLE_A create table TABLE_A ( A ), B ) ); --给TABLE_A添加数据 insert into TABLE_A values(' ...
- Linq 集合操作符 Except,Intersect,Union
IList<string> s1 = new List<string>() { "One", "Two", "Three&qu ...
- LINQ 学习路程 -- 查询操作 Distinct Except Intersect Union
Set Operators Usage Distinct 去掉集合的重复项 Except 返回两个集合的不同,第一个集合的元素不能出现在第二个集合中 Intersect 返回两个集合的交集,即元素同时 ...
随机推荐
- 解决mysql 1040错误Too many connections的方法
从官方文档知道linux上面编译安装的mysql默认的连接为100个,这样对于网站的需求来说是远远不够的. mysql官方告诉我们需要修改max_connections的值,那么我们怎么去修改呢?有两 ...
- zookeeper的C#Client
最近在搭一套soa, 服务使用java/scala 的finagle 协议使用thrift 然后 finagle默认服务端会是使用zookeeper作为节点存储.. 所以想要访问具体服务,需要先通过 ...
- Java模拟登录系统抓取内容【转载】
没有看考勤的习惯,导致我的一天班白上了,都是钱啊,系统也不发个邮件通知下.... 为了避免以后还有类似状况特别写了个java模拟登录抓取考勤内容的方法(部分代码来自网络),希望有人修改后也可以 ...
- zoj 2112 Dynamic Rankings 动态第k大 线段树套Treap
Dynamic Rankings Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.zju.edu.cn/onlinejudge/show ...
- iOS开发——常识swift篇&随机数获取
随机数获取 arc4random()这个全局函数会生成9位数的随机整数 1,下面是使用arc4random函数求一个1~100的随机数(包括1和100) var temp:Int = ...
- Android Dalvik虚拟机初识(转)
原文地址:http://blog.csdn.net/andyxm/article/details/6126907 android虚拟机jvmjava优化linux内核 首先,让我们来思考下面几个问题: ...
- win7系统激活最简单方法
利用激活工具快速激活WIN7系统! 工具/原料 小马Oem7.未激活的WIN7系统 步骤/方法 1 复制BT种子 http://www.pccppc.com/download/oem7F.rar粘贴到 ...
- RTB广告展示分步说明
原文:http://contest.ipinyou.com/cn/manual.shtml RTB (Real Time Bidding, 实时竞价) 是近年来计算广告领域最激动人心的进展之一. 它增 ...
- 自动监控主从MySQL同步的SHELL脚本
代码如下: #!/bin/bash #check MySQL_Slave Status #crontab time 00:10 MYSQLPORT=`netstat -na|grep "LI ...
- 关于通过adb启动Activity、activity、service以及发送broadcast的命令
一.启动activity: $ adb shell$ am start -n {包名}/{包名}.{活动名称} 如:启动一个名叫MainActivity的活动 # am start -n com.ex ...