关于null值比较的问题
是个很简单的问题。
表里面的数据:
SQL> select * from product_all;
ID1 AMOUNT ID2 WEIGHT EXIST
---------- ---------- ---------- ---------- ----------
2 200 2 22 0
4 400 4 44 1
3 300
1 100
查询语句:
SQL> select * from product_all where id2<>2;
ID1 AMOUNT ID2 WEIGHT EXIST
---------- ---------- ---------- ---------- ----------
4 400 4 44 1
按照人的通常思维,值为空,当然也是不等于2的,所以本来想能将后面两条记录查出来,但实际查不出来。
这个原因其实我是明白的。
因为oracle里面null值是不能用比较运算符的,任何比较得到的结果都是false,所以后面两条id2字段为null的记录查不出来。
要想查出来这些记录,必须加一个条件or id2 is null
但是我的问题是,oracle的这种特性会给应用带来困惑:
第一,这要求做应用的人必须知道字段的准确属性,是否可能为null,并且时刻牢记
第二,还要求做应用的人必须时刻牢记oracle null值比较的特性
但是这其实与人普通思维有悖,应用的人很容易忘记加or id2 is null的条件。
大家都是怎么做的,难道所有非等值比较都去加一个is null么?这太累赘了。