oracle不等于,not in ,not exists的使用

本文深入探讨了SQL查询中<>操作符的正确用法及其在过滤空值时的问题解决方法,并对比了exists与in、not exists与not in的区别,帮助读者更好地理解和掌握SQL查询技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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);

此时查出的结果为空.

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值