oracle中的 “不等于”

在Oracle数据库中,使用不等号(<>,!=,^=)时需谨慎,特别是处理空值时。文章解析了为何ename<>'scott'会忽略空值,并提供了正确的查询方法,如使用INSTR或NVL函数。

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

在Oracle中,不等号有三种:<>,!=,^= ,但是并不是可以任意替换的。

  来看一个例子:

 1) 查询员工姓名不为scott的记录,想都没想,直接select * from emp where ename<>'scott'。

       ename不为空的倒是都查出来了,但是ename为空的没查出来。

       原来这么写的返回结果是“ename不为scott,且name不为空” 的记录。而我们的目的是得到“ename不为scott的全部记录”,当然这也包括ename为空的记录,所以这么写SQL语句是有问题的。为了解决这个问题,我们可以采用以下两种方案:

   select * from emp where instr(concat(ename,'xx'),'scott') = 0 ;
或者
   select * from emp where nvl(ename,'xx')<>'scott' ;

再看一个:

2) 

 查询ename不为空的记录。用select * from emp where ename <> null,结果为空。应该用 is null替换<>

备注:null只能通过is null或者is not null来判断,其它操作符与null操作都是false

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值