oracle中的null问题(初学)

当字段中有null时,需要区别对待。
说明:
1、等价于没有任何值、是未知数。
2、NULL与0,空字符串,空格,包括NULL与NULL也是不等的。
3、对空值做加、减、乘、除等运算操作,结果仍为空。
4、NULL的处理使用NVL或者NVL2函数,详细见下面链接
http://blog.****.net/joyksk/article/details/54316125
5、比较时使用关键字用“is null”和“is not null”。
6、空值不能被索引,所以查询时有些符合条件的数据可能查不出来,count(*)中, 用nvl(列名,0)处理后再查。
7、排序时比其他数据都大(索引默认是降序排列,小→大),所以NULL值总是排在最后。

一、NULL的基本概念

NULL的值是没有定义的,未知的,不确定的。
由概念可知

1、当一条记录的某个列为NULL,则表示这个列的值是未知的、是不确定的
2、对NULL的关系运算和一般运算都是结果NULL
关系运算符
oracle中的null问题(初学)
一般运算符
oracle中的null问题(初学)
所以,很多时候除了IS NULL、IS NOT NULL以外的操作,对NULL的任何操作的结果还是NULL。
3、对NULL进行逻辑运算结果的讨论
逻辑运算符
oracle中的null问题(初学)

核心:NULL是未知的,但是目前NULL的类型是布尔类型,因此NULL只有可能是TRUE或者FALSE中的一个。
结果:
and:
false and false = false  false and true = false  false and null = false
true and false = false  true and true = true  true and null = null
null and false = false  null and true = null  null and null = null
or:
false or false = false  false or true = true  false or null = null
true or false = true  true or true = true  true or null = true
null or false = null  null or true = true  null or null = null
not:
not null = null
注意:这个NOT NULL是一个布尔操作,要和SQL中的NOT NULL约束进行区分。NOT NULL约束是一个定性的描述,只是表示列中的数据不允许为NULL。而这里的布尔操作,却是在进行求值,要得到对NULL取非的结果,所以仍然得到NULL。

二、NULL的其他问题

1、NULL的字符串表示格式”
2、NULL和索引的关系
3、NULL对SQL使用索引的影响
4、SQL和PLSQL中处理NULL的一些问题
5、NULL在Oracle中的默认数据类型是什么
6、CHECK约束中的NULL条件
http://blog.****.net/zs064811/article/details/51595666