Oracle Minus关键字

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
   )

时间: 2024-10-07 22:09:20

Oracle Minus关键字的相关文章

Oracle Minus 取差集

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

Oracle minus用法详解及应用实例

Oracle minus用法 “minus”直接翻译为中文是“减”的意思,在Oracle中也是用来做减法操作的,只不过它不是传统意义上对数字的减法,而是对查询结果集的减法.A minus B就意味着将结果集A去除结果集B中所包含的所有记录后的结果,即在A中存在,而在B中不存在的记录.其算法跟Java中的Collection的removeAll()类似,即A minus B将只去除A跟B的交集部分,对于B中存在而A中不存在的记录不会做任何操作,也不会抛出异常. Oracle的minus是按列进行比

Oracle多关键字查询

因项目需要,在某查询页面的查询字段支持多关键字查询,支持空格隔开查询条件,故实现如下: 使用的原理是:ORACLE中的支持正则表达式的函数REGEXP_LIKE, '|' 指明两项之间的一个选择.例子'^([a-z]+|[0-9]+)$'表示所有小写字母或数字组合成的字符串. '+' 匹配前面的子表达式一次或多次. '( )' 标记一个子表达式的开始和结束位置. 如需要查询的关键字为"杆塔 鸟巢" select t.defect_phenomenon, t.defect_code, t

oracle常用关键字和函数

数据库的增删改查: 增:insert into ... values(); 例:insert into p_emp values(sq_emp.nextval,'小白','保洁',7902,sysdate,600,null,30,0); commit; 注意,表里边有多少列,values()里边的内容就有多少,一一对应关系.后边加分号结束语句,然后commit:提交. 自增长序列:右击Sequences,new一个新的自增序列,起一个name,然后有一个nextval属性,实现自增长. 查:se

oracle deterministic 关键字

多次看到DETERMINISTIC,一直很疑惑,今天做了一个实验.我们欺骗Oracle说是一个DETERMINISTIC函数,它在SQL中只调用一次.如果不使用DETERMINISTIC,可以看到出来的值都不一样.使用DETERMINISTIC后,不同的会话都出来一样的值. SQL> create or replace function f_t(i_p int) return number DETERMINISTIC is      i_rtn number;    begin      i_r

Oracle多关键字模糊查询

以前写SQL时,知道MySQL多字段模糊查询可以使用[charlist] 通配符,如: SELECT * FROM Persons WHERE City LIKE '[ALN]%'但是在Oracle中使用这种方式进行查询时,却不能查询出结果可以使用以下几种方式进行多字段模糊查询: 方法1: select name from table1 where sdate = '2018/05/20' and substr(code,0,1) in ('1','2','3')方法2: -- 原文地址:htt

Oracle知识关键字

创建表:create :删除表:drop:查询:select: 增加:insert into :删除列:delect:修改:update: 分组:group by:表连接:join.left join.right join.cross join: 去除重复:distinct:表连接过滤:having:视图(虚表):view: 序列号:rownum:字段属性:constratint;索引:index:序列:sequence: PL_SQL:declare-end;游标:cursor:存储过程:pr

Oracle中关键字like的使用总结

Like 模糊查询 占位符 %  任意个数字符 _  一个字符 查询 用户名以‘S’开头的员工信息 Select * from emp where ename like 'S%' 查询用户名第二个字母是‘A’的员工信息 select * from emp where ename like '_A%' 查询用户名第三个字母是‘A’的员工信息 select * from emp where ename like '__A%' 包含A select * from emp where ename lik

oracle取差值集合

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