oracle中不等于、NVL、exists、in的使用

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 函数
NVL函数的格式如下:NVL(expr1,expr2)

含义是:如果oracle第一个参数为空那么显示第二个参数的值,如果第一个参数的值不为空,则显示第一个参数本来的值。

例如:

SQL> select ename,NVL(comm, -1) from emp;
        select * from s_dic s where nvl(s.dic_type, 'woshuo') <> 'ordertype'

3)trim 函数
去空格。此外还有ltrim、rtrim
https://www.cnblogs.com/lanzi/archive/2013/01/14/2859666.html
例如:select trim(to_char(id,'0000')) from t1
先用to_char补0再去掉空格。

2.exists和in的区别

in 是把外表和内表作hash join,而exists是对外表作loop,每次loop再对内表进行查询。这样的话,in适合内外表都很大的情况,exists适合外表结果集很小的情况。

  1. not exists和not in的区别

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值