赞
踩
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查询,外表存在空值,存在空值的那条记录最终将被过滤,其他数据不受影响。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。