例子:
create table A (
num number(10));
create table B (
num number(10));
表A中记录为1 2 3 9
表B中记录为2 3 4 5
现在要查询出1 9,可以用下面三个语句
(1)select a.num from A a where a.num not in (select b.num from B b);
(2)select a.num from A a minus select b.num from B b (这里a.num和b.num前不需要加distinct也会自动列出不重复的数据,要求两个查询出的列数相同,字段类型相同)
(3)select a.num from A a where not exists (select b.num from B b where b.num=a.num)
当前表A、B的数据量很小以上三个sql查询效率上是不同的,当量大的情况下(1)和(2)(3)效率差距较大,
本人只使用时的数据量(A表4800条记录,B表11600条记录),执行时间如下
(1) 139S
(2) 3S
(3) 2.4S
均是初始执行时间
后期再研究为什么效率会如此大的差距
补充一(转自
ITPUB论坛):
minus 剔重且会排序
not exists/not in所谓的anti join,当然前者是真正的anti join,not in可能遇到null麻烦点,可能性能低,如果解决了null的问题,not exists/not in基本差别很小了,cbo会转为等价的写法。他们会返回所有满足条件的主表数据,不管是否有重复。
如果主表不存在重复数据,minus和not exists结果是可以相互转为等价的,但是因为有排序,性能可能要差点,当然排序是一般情况下有,如果全部能从索引获取什么的,可能会消除。
还有种是外连接写法,也可以转成和anti join等价的结果
select a.* from a,b where a.id=b.id(+) and b.id is null;
有时候not exists,not in什么的走不了anti join,也可以考虑这种写法,join在oracle里高效的算法是比较多的
分享到:
相关推荐
此资源为.txt文件,里面描述了sql中minus的使用方法和案例,如果需要可以下载
NULL 博文链接:https://wuaner.iteye.com/blog/1671927
♦ SQL 指令: SQL 如何被用来储存、读取、以及处理数据库之中的资料。 ♦ 表格处理: SQL 如何被用来处理数据库中的表格。 ♦ 进阶 SQL: 介绍 SQL 进阶概念,以及如何用 SQL 来执行一些较复杂的运算。 ♦ SQL 语法: ...
主要介绍了MySQL中对于not in和minus使用的优化,作者给出了实例和运行时间对比,需要的朋友可以参考下
Minus
SQL指令 2 SELECT 2 DISTINCT 3 WHERE 4 AND OR 5 IN 5 BETWEEN 6 LIKE 7 ORDER BY 8 函数 10 COUNT 11 GROUP BY 12 HAVING 13 ALIAS 13 表格链接 15 外部链接 16 CONCATENATE 17 SUBSTRING 18 TRIM 19 表格处理 21 ...
Fix for extra space being inserted after minus inside IN clause (Forum post) Support ticket 73192: Fix for Inline EXEC not inlining negative variables correctly Support ticket 73072: Fix for cancel ...
SQL语句(05) IN 2 SQL语句(06) BETWEEN 3 SQL语句(07) LIKE 3 SQL语句(08) ORDER BY 3 SQL语句(09) 函数 3 SQL语句(10) COUNT 3 SQL语句(11) Group By 4 SQL语句(12) HAVING 4 SQL语句(13) ALIAS 4 SQL语句(14) 连接...
3.8 联合 (Union [All],Minus,Intersect) 3.9 字段别名,数据表别名 3.10 SQL子查询表,内嵌SQL子句 4、粘贴字段、系统函数 5、SQL查询语句反向分析, 无论多么复杂的语句,都能分析得出来 包括上面提到...
union,minus和intersect关系
C_minus语言词法分析器 C_minus语言词法分析器
SQL语句生成器的特色 支持几乎所有类型的数据库, 包括小型(桌面)数据库:Fox DBF、Microsoft Execl、Text、Borland Paradox、 中型数据库:Microsoft Access 大型数据库:Microsoft SQL Server、Sybase、Oracle ...
使用MINUS实现差值运算.rar使用MINUS实现差值运算.rar
NOT 与 IN 在一起使用时,NOT 是找出与条件列表不匹配的行。 IN 列表里有 NULL 时不处理,不影响结果;用 NOT IN 时,有 NULL 则出错,必须排除空值再运算。 in :选择列表的条件 使用IN操作符的优点: 在长的...
Compiler construction principles and Practice 对应C minus的代码实现
无论多么复杂的语句,都能分析出来(包括SQL各子句中嵌套的SQL语句) 5、数据库视图定义和重建 6、支持将SQL查询语句,替换为插入(Insert into)和更新(Update)语句 7、附属工具内嵌入Delphi IDE(支持Delphi 5和...
Fix for extra space being inserted after minus inside IN clause (Forum post) Support ticket 73192: Fix for Inline EXEC not inlining negative variables correctly Support ticket 73072: Fix for cancel ...
用JAVACC构造一个解释器,很不错,欢迎下载,课程设计时要用到