Oracle不等号与Null的关系, 查询结果不包含null

遇到查询问题, 写SQL当where status =! 'Y'时, 
期望结果是: 查询出status不为 'Y' (包含null)的数据。 

然而现实是: 查询出status不为 'Y', 和不为 'null' 的数据。

有例表:emp  
  
   emp_no         name    age     status     
    001           Tom      17       Y
    002           Sun      14       N
    003           Tom      15       
    004           Tom      12       N

--All date
select * from emp;

-- != 'Y'  不包含null  (emp_no = 002, 004)
select * from emp where status != 'Y';

-- != 'Y'  包含null    (emp_no = 002, 003, 004)
select * from emp where status != 'Y' or status is null;

//事实上,并不仅仅“不等于号”与Null的关系是如此的,其他操作符也类似,只不过“不等于号”使用场景的特殊性让我们容易发觉此特性。

//其中原因在于Null,关于Null的各种情况说明可见以下Oracle的文档:
http://docs.oracle.com/cd/B19306_01/server.102/b14200/sql_elements005.htm
http://www.cnblogs.com/nick-huang/p/3921605.html

猜你喜欢

转载自ztao2333.iteye.com/blog/2399086