1.在Oracle里,null是个相对独立的东西。它和所有非空的数据对立。对于字符串''来说,null既不等于'',也不不等于'';对于数值型来说,null既不等于0,也不不等于0;它不等于任何值,也不不等于任何值。也就是说null和所以其他的值没有可比性,即不能用等于、不等于、大于或小于和其它数值比较,当然也包括空值本身,只能用is null,is not null比较。
2.如果使用带有其它比较操作符的条件表达式,并且其结果依赖于空值(如,在全量中找到某字段为空的所有记录,然后在此基础上再查找时,结果肯定为空。),那么其结果必定是NULL。在where条件中,Oracle认为结果为NULL的条件为FALSE,带有这样条件的select语句不返回行,也不返回错误信息。
3.往Oracle里插入''时,不会和sqlserver一样存入'',而是将这个字段设置为null,那么在查询这条记录的时候,如果查询'',则不会返回结果,条件里使用null才能找到。
【例子】解释第2条。
代码
(
FID NUMBER(2) not null,
VALD NUMBER(32)
)
tablespace DATATS
pctfree 10
initrans 1
maxtrans 255
storage
(
initial 64K
minextents 1
maxextents unlimited
);
如上面的脚本建表,随便插入几条数据,要包括为空的记录才有效果。
执行select * from t_xy t,列出全部数据
执行select * from t_xy t where vald!=0 and vald is null,不返回记录,因为where条件依赖于null,则结果为null,整个where条件为false,select语句不返回行
执行select * from t_xy t where vald!=0 and vald is not null 返回不带空字段,并且vald!=0的记录因为where条件不依赖于null
执行select * from t_xy t where vald!=0 返回不带空字段,并且vald!=0的记录因为where条件不依赖于null,等同于上面的语句。(vald在和0比较的时候,Oracle自动排除掉空值字段,所 以可以不用加vald is not null条件。所以只要是满足vald!=0,则肯定是在not null的范围里相互比较,所以肯定查找不到is null的记录)