1.<>
select * from s_dic s where s.dic_type <> 'ordertype'
问题1: <>会自动过滤s.dic_type为空的订单
解决方法:
1)截取字符串:返回第一次ordertype出现的位置,找不到对应字符串返回为0,不过dic_type必须保证为非空,所以联合concat一起使用,instr(s.dic_type,'ordertype')= 0
拼接字符串concat(ordertype, 'woshuo')
select * from s_dic s where instr(concat(s.dic_type, 'woshuo'),'ordertype') = 0
2)nvl 函数
select * from s_dic s where nvl(s.dic_type, 'woshuo') <> 'ordertype'
2.exists和in的区别
in 是把外表和内表作hash join,而exists是对外表作loop,每次loop再对内表进行查询。这样的话,in适合内外表都很大的情
况,exists适合外表结果集很小的情况。
3. not exists和not in的区别
1)对于not exists查询,内表存在空值对查询结果没有影响;对于not in查询,内表存在空值将导致最终的查询结果为空。
2)对于not exists查询,外表存在空值,存在空值的那条记录最终会输出;对于not in查询,外表存在空值,存在空值的那条记
录,最终将被过滤,其他数据不受影响
select value from temp_a a
where a.id between 1 and 100
and not exists(select * from temp_b b where a.value=b.value);
这时能查出结果
select value from temp_a a
where a.id between 1 and 100
and a.value not in(select value from temp_b);
此时查出的结果为空.