Oracle的null说明

  假设有一张表格table1

col_a

col_b

 (空格)

1

2

3

a

 

查询:

  select * from table1 where col_a = ''    --0条记录

  select * from table1 where col_a is null    --3条记录

  select * from table1 where col_a !='a'    --1条记录

  解释:null的意义:没有值,不等价于任何值,是一个未知数,当null作为条件进行操作时,就不能用"="(虽然语法没有错),即不能定值判断,应该使用is Null 或者 is not Null

  is null/ is not null语句外,对Null的操作均不会出现返回在结果中

 

插入:

  插入空字符串的时候会自动转化为null,在Oracle中没有空字符串,只有null,例如:

  insert into table1 values(null, null);    -- 插入NULL,插入成功

  insert into table1 values('a', '');    -- 第二个字段类型为int型,但还是能插入成功,再次证明,’’ 被当作了null处理,如果是字符串,执行会报错

 

函数:

在使用AVGMAXSUMCOUNT等函数时,为NULL的纪录往往会被忽略。

例如:

  select AVG(col_b) from table1; -- 结果为 2 NULL的纪录行忽略掉了

  select MAX(col_b) from table1; -- 结果为 3

  select SUM(col_b) from table1; -- 结果为 6

  select COUNT(col_b) from table1; -- 结果为 3

  select COUNT(col_a) from table1; -- 结果为 2

  select COUNT(*) from table1; -- 结果为 5

 

排序:

  select * from table1 order by address    -- null值会排在后面

  select * from table1 order by address desc    -- null值会排在前面

  Order by排序时缺省认为null是最大值,ASC升序则被排在最后,而DESC降序则排在最前

  解决:如果要改变排序方式,可以:

    1. 使用 nvl 函数,例如在排序中使用ORDER BY NVL(FIELD, '0')

    2. 使用其它函数,例如:decodecase

    3. nulls firstnulls last(注:Nulls first:表示null值的记录将排在最前;Nulls last:表示null值的记录将排在最后),例:

      select * from table1 order by aac001 asc nulls first    --null值始终放在最前面
      select * from table1 order by aac001 desc nulls last    --null值始终放在最后面

计算:

  对NULL的=、!=、>、<、>=、<=等操作的结果都为NULL。

  对NULL进行+、-、*、/等操作的结果也都为NULL。

AND操作:

AND

TRUE

FALSE

NULL

TRUE

TRUE

FALSE

NULL

FALSE

FALSE

FALSE

FALSE

NULL

NULL

FALSE

NULL

OR操作:

OR

TRUE

FALSE

NULL

TRUE

TRUE

TRUE

TRUE

FALSE

TRUE

FALSE

NULL

NULL

TRUE

NULL

NULL

猜你喜欢

转载自www.cnblogs.com/GodSince/p/10941053.html