当前位置:   article > 正文

Oracle 的 not in 和 not exists_oracle 两个 not in

oracle 两个 not in

1.  regexp_substr 字符串匹配

select regexp_substr('陈凯-chenk','[^-]+',1,1), instr('yuechaotianyuechao','ao') position from dual;

起始位置,从第几个字符开始正则表达式匹配(默认为1),

匹配第一个‘-’   

得到的结果是:陈凯

2. not  in  或者 in 

为什么not in的效率会低?

因为要判断内表查询字段是否有空值,如果有空值,则使用的时 FILTER ;如果明确指出关联字段时不空的,则使用hash连接,速度会极大的提升

not in 的子查询语句结果中不能有null值,否则就查询不出结果

in (1,2,null) 其中null是会被忽略掉的;

判断字段是否是null,只能使用 is null  或者  is not  null  来判断

表A:  表B:

select * from A a where a.id not in (select id from B b  ) 

    如果 table2 中col1有null值,则查询结果就是空

修改1:select * from A a where a.id not in (select id from B b where b.id is not null )   正确

修改2:select * from a where not exists (select * from b where b.id = a.id)   正确

 

明确通知Oracle,not in 的字段查询时,是不会有空值参与的。这样表连接就使用HASH JOIN连接表了。

或者两张表的关联字段设置不允许为null,即可。

select * from a   where col is not null and col not in (select col from b where col is not null);

3。not  exists

1、对于not exists查询,内表存在空值对查询结果没有影响;对于not in查询,内表存在空值将导致最终的查询结果为空。

2、对于not exists查询,外表存在空值,存在空值的那条记录最终会输出;对于not in查询,外表存在空值,存在空值的那条记录最终将被过滤,其他数据不受影响。

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/480045
推荐阅读
相关标签
  

闽ICP备14008679号