oracle取差值集合

Oracle Minus关键字
SQL中的MINUS关键字
SQL中有一个MINUS关键字,它运用在两个SQL语句上,它先找出第一条SQL语句所产生的结果,然后看这些结果有没有在第二个SQL语句的结果中。如果有的话,那这一笔记录就被去除,而不会在最后的结果中出现。如果第二个SQL语句所产生的结果并没有存在于第一个SQL语句所产生的结果内,那这笔资料就被抛弃,其语法如下:
[SQL Segment 1]
MINUS
[SQL Segment 2]
--------------------------------------------
//创建表1

create table test1
(
name varchar(10),
sex varchar(10),
);

insert into test1 values(‘test‘,‘female‘);
insert into test1 values(‘test1‘,‘female‘);
insert into test1 values(‘test1‘,‘female‘);
insert into test1 values(‘test11‘,‘female‘);
insert into test1 values(‘test111‘,‘female‘);

//创建表2

create table test2
(
name varchar(10),
sex varchar(10),
);
insert into test1 values(‘test‘,‘female‘);
insert into test1 values(‘test2‘,‘female‘);
insert into test1 values(‘test2‘,‘female‘);
insert into test1 values(‘test22‘,‘female‘);
insert into test1 values(‘test222‘,‘female‘);

-------------------------------------------

select * from test1 minus select * from test2;

结果:

NAME SEX
---------- ----------
test1 female
test11 female
test111 female
-----------------------------------------------------------

select * from test2 minus select * from test1;

结果:

NAME SEX
---------- ----------
test2 female
test22 female
test222 female

结论:Minus返回的总是左边表中的数据,它返回的是差集。注意:minus有剃重作用

==========================================================

下面是我做的实验,很明显能够看出MINUS的效率,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 NOT exists (
   SELECT order_id
   FROM charge_detail
   WHERE order_id = a.order_id
   )
  18.19 sec
  SELECT order_id FROM made_order
  WHERE order_id NOT in (
   SELECT order_id
   FROM charge_detail
   )
  20.05 sec

还有其它一下关键字:

INTERSECT (交集)

UNION ALL 并集

时间: 2024-08-01 01:03:17

oracle取差值集合的相关文章

oracle中minus取差值

minus运算的主要功能是: 在进行两个表格或者两个查询结果的时候 ,返回在第一个表格/查询结果中与第二个表格/查询结果不相同的记录. 比如: 第一张表COURSE_HOMEWORK_RECORD里REPLY_AFFIX 第二张表RESOURCES_MAPPING_NEW里FILE_ID 返回:三条不重复的数据. 比如:  结论:Minus返回的总是第一张表中的数据,它返回的是差集.注意:minus有去重作用. 转载请注明:张不盹博客 http://my.oschina.net/zhangbud

获取两个字符串日期的差值的方法

日期的格式:“yymmddhhmmss”是一个字符串,计算两个日期之间的差值,显然就是计算两个日期之间相差的秒数,有个简洁的方法是将字符串转化为time_t格式,用time_t表示的时间(日历时间)是从一个时间点(例如:1970年1月1日0时0分0秒)到此时的秒数 我们可以看到它的定义是这样的 #ifndef _TIME_T_DEFINEDtypedef long time_t;           /* 时间值 */#define _TIME_T_DEFINED       /* 避免重复定义

Oracle存储过程-自定义数据类型,集合,遍历取值

摘要 Oracle存储过程,自定义数据类型,集合,遍历取值 目录[-] 0.前言 1.Packages 2.Packages bodies 3.输出结果 0.前言 在Oracle的存储过程中,可能会遇到数据处理,假如我们目前的功能在一个Packages中 Packages封装了多个不同功能的Procedure,我们在一个Procedure里面进行统计 在另外一个Procedure进行计算 这就需要一个存放结果集的地方 以前的解决方案是:建立了一个临时表,数据统计出来后,放入临时表中 在另外一个P

动态集合中两个最接近的数的差值

题目: 思考: 既然是动态集合,那么我们需要用链表来存储数据方便插入和删除.于是我们可以选用二叉链表,也就是红黑树来存储数据,红黑树由于比较平衡,所以可以得到比较好的查询时间.但是我们并不是直接拿红黑树就可以用了,因为基本的红黑树没有MIN_GAP操作,所以需要自己修改和维护原始的红黑树. 如何给红黑树添加MIN_GAP操作呢?我们需要先给红黑树结构中加入MAX,MIN指针.这个操作可以参考最坏时间为O(1)的求最大小值,当然只取了里面部分新增代码.既然新指针已经添加好了,那么我们以原有红黑树插

Oracle 取两个表中数据的交集并集差异集合

Oracle 取两个表中数据的交集 关键字: Oracle 取两个表中数据的交集 INTERSECT Oracle 作为一个大型的关系数据库,日常应用中往往需要提取两个表的交集数据 例如现有如下表,要求找出工资2500(不含2500)以上并且是男性(M)的员工编号,那么就要利用这两个表的关系做一个交集了 employee CODE NAME GENDER 001 Tom M 002 Jerry M 003 Ana F salary CODE SALARY 001 2800 002 2500 00

用Scala实现集合中相邻元素间的差值

欢迎转载,转载请注明出处,徽沪一郎. 概要 代码这东西,不写肯定不行,新学Scala不久,将实际遇到的一些问题记录下来,日后也好查找. 今天讲的是如何计算同一集合中元素两两之间的差值,即求开始集合(a,b,c,d)中(b-a,c-b,d-c) 解法 val l1 = 1 to 10 toList val l2 = l1.tail l1.zip(l2).map(p=>(p._2 - p._1) 上述代码即可求出两两差值.代码含义稍作解释: tail表示一个集合中除首元素外的剩余元素,也是一个集合.

C# 两个集合比较差值 Linq的Except的用法

C# 两个集合比较差值 Linq的Except的用法 值类型的集合比较差值 List<string> strList1 = new List<string>(){"a", "b", "c", "d"}; List<string> strList2 = new List<string>() { "a", "b", "f",

从有序集合随机取一个值,应该用什么方案?

今天做了一个小实验,起因如下: 先在redis里构造了测试数据,如下: > zadd my_zset_999 1 35570 (integer) 1 > zadd my_zset_999 2 40617 (integer) 1 > zadd my_zset_999 3 40956 (integer) 1 > zadd my_zset_999 4 41151 (integer) 1 > > zrange my_zset_999 0 -1 WITHSCORES 1) &qu

Codeforces 1334C - Circle of Monsters(差值取前缀和 / 贪心)

两种思路其实只差在写法上 看不懂的就直接看代码吧qwq 题面 题意 n只怪物围成一圈,每只怪物拥有体力a和爆炸伤害b 如果怪物 i 死亡(体力小于等于0),则与他相邻的下一只怪物将受到 b[i] 点伤害 (如果 i<n ,则下一只怪物为 i+1 :如果 i==n,则下一只怪物为 1) 如果相邻的下一只怪物不存在,则什么也不会发生 如果相邻的下一只怪物受到伤害后也死亡了,那么再下一只怪物会继续受到伤害(链式反应) 每次你能随便挑一只怪物开一枪,那只怪物的体力将会降低 1 点 问至少需要开多少枪才能