首页 > 解决方案 > 语句Oracle Sql中where子句中的空值

问题描述

我知道我不能简单地说 NULL 值等于某个整数等。但我想知道 NULL = 5 或类似的输出是什么。由于下面的代码,我不认为这是错误的。

select * 
from hr.employees
where
   NOT (
      COMMISSION_PCT IN (.4,.3,.2,.25,.15,.35,.1)
   )

我猜当commission_pct 为空时,它既不是真的也不是假的。在这些类型的问题中,处理空值的良好做法是什么?为了谨慎起见,我应该在每个非空列中使用类似下面的内容吗?

select * 
from hr.employees
where
   NOT (
      NVL(COMMISSION_PCT,.99) IN (.4,.3,.2,.25,.15,.35,.1)
   )

标签: sqloraclenullwhere-clausenvl

解决方案


添加比较NULL

SELECT * 
FROM   hr.employees
WHERE  COMMISSION_PCT NOT IN (.4,.3,.2,.25,.15,.35,.1)
OR     COMMISSION_PCT IS NULL;

如果您使用NVL,那么 Oracle 将不会在列上使用索引(您需要使用基于函数的索引NVL(commission_pct, 0.99))。


推荐阅读