Oracle中null的使用详解

问:什么是NULL?
答:在我们不知道具体有什么数据的时候,也即未知,可以用NULL,我们称它为空,ORACLE中,含有空值的表列长度为零。
ORACLE允许任何一种数据类型的字段为空,除了以下两种情况:
1、主键字段(primary key),
2、定义时已经加了NOT NULL限制条件的字段

说明:
1、等价于没有任何值、是未知数。
2、NULL与0、空字符串、空格都不同。
3、对空值做加、减、乘、除等运算操作,结果仍为空。
4、NULL的处理使用NVL函数
5、比较时使用关键字用“is null”和“is not null”。
6、空值不能被索引,所以查询时有些符合条件的数据可能查不出来,count(*)中,用nvl(列名,0)处理后再查。
7、排序时比其他数据都大(索引默认是降序排列,小→大),所以NULL值总是排在最后。

使用方法:
现有一个商品销售表sale,表结构为:
month  char(6)  --月份
sellnumber(10,2) --月销售金额

create table sale (month char(6),sell number);

然后我们给该表插入12条记录:

insert into sale values('200001',1000);
insert into sale values('200002',1100);
insert into sale values('200003',1200);
insert into sale values('200004',1300);
insert into sale values('200005',1400);
insert into sale values('200006',1500);
insert into sale values('200007',1600);
insert into sale values('200101',1100);
insert into sale values('200202',1200);
insert into sale values('200301',1300);
insert into sale values('200008',1000);
insert into sale(month) values('200009');

注意:最后一条记录的sell值为空,接下来测试几条sql来看看null的特性:


select * from sale where null=null;

MONTH SELL
------ ----

没有任何输入,说明null=null返回false,null与其自身都不相等,呵呵,有一点怪异。


select * from sale where null = 0;

MONTH SELL
------ ----

没有任何输入,说明null=0返回false,null与0不相等。


select * from sale where null = '';

MONTH SELL
------ ----

没有任何输入,说明null=''返回false,null与''不相等。


select * from sale where ''='';

MONTH SELL
------ ----

没有任何输入,说明''=''返回false,''与''不相等。


SQL> select * from sale where null is null;

MONTH SELL
------ ----
200001 1000
200002 1100
200003 1200
200004 1300
200005 1400
200006 1500
200007 1600
200101 1100
200202 1200
200301 1300
200008 1000
200009

12 rows selected

sale表的所有数据都成功返回,说明null is null返回true,看来null只能使用is null来识别。

再来看看null对于集合函数的影响:

SQL> select count(*) from sale;

COUNT(*)
----------
12

SQL> select count(sell) from sale;

COUNT(SELL)
-----------
11

可以看出count函数在使用某一列作为参数的时候不会计算null,而count(*)会将null计算在内。

from:http://database.51cto.com/art/200511/10681.htm

参考链接:
http://www.blogjava.net/lingy/archive/2009/06/29/284559.html

此条目发表在DB/ES分类目录,贴了标签。将固定链接加入收藏夹。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据