NULL 2007-09-23 22:33

字号:    

定义:

null表示no valueunknown,它不表示0,也不表示一个空的字符串。

 

SQL函数中的NULL

       所有的函数,除了REPLACE , NVL , CONCAT以外,如果你用null作为它的参数,那么结果就是返回null

       大部分的聚集函数如(COUNTAVG),他们会忽略null,如一个列上面有10行记录,其中2行是null,那么count这个列的结果就是8

 

例如

在增加月份函数中使用null进行计算的情况:

SQL> select to_char(sysdate,'yyyy-mm-dd') today from dual;

TODAY

----------

2007-09-23

 

SQL> select to_char(add_months(sysdate,1),'yyyy-mm-dd') another_day from dual;

ANOTHER_DA

----------

2007-10-23

 

SQL> select to_char(add_months(sysdate,null),'yyyy-mm-dd') another_day from dual;

ANOTHER_DA

----------

 

       聚集函数的情况:

22:11:28 SQL> select empno,ename,comm from emp;

     EMPNO ENAME            COMM

---------- ----------            ----------

      7369 SMITH

      7499 ALLEN             300

      7521 WARD              500

      7566 JONES

      7654 MARTIN           1400

      7698 BLAKE

      7782 CLARK

      7788 SCOTT

      7839 KING

      7844 TURNER              0

      7876 ADAMS

      7900 JAMES

      7902 FORD

      7934 MILLER

已选择14行。

 

22:11:43 SQL> select count(empno) from emp;

COUNT(EMPNO)

------------------------

          14

 

22:12:05 SQL> select count(comm) from emp;

COUNT(COMM)

-----------------------

          4

 

条件中的null

NULL所进行的任何数学计算结果都是null,如10+null结果是null

oracle始终认为两个null是不相等的(除了少数情况),不能用null=null这个条件来进行判断两个null是否相等,null不等于其他的null,你只能用is null或者is not null来判断某个记录的某个字段是不是null

但是oracle在使用decode函数的时候,它认为两个null是相等的。

oracle还有一种情况也认为两个不同的null是相等的,就是在一个复合键中,如果这两个复合键值中非null部分是相等的,那么这两个复合键值是相等的。

下面给出null出现的条件表格:

如果a

比较条件是

那么结果是

10

a IS NULL

FALSE

10

a IS NOT NULL

TRUE

NULL

a IS NULL

TRUE

NULL

a IS NOT NULL

FALSE

10

a = NULL

UNKNOWN(其实就是null

10

a != NULL

UNKNOWN

NULL

a = NULL

UNKNOWN

NULL

a != NULL

UNKNOWN

NULL

a = 10

UNKNOWN

NULL

a != 10

UNKNOWN

 

例如:

22:25:00 SQL> select empno,ename,comm from emp;

    EMPNO ENAME            COMM

---------- ----------             ----------

      7369 SMITH

      7499 ALLEN             300

      7521 WARD              500

      7566 JONES

      7654 MARTIN           1400

      7698 BLAKE

      7782 CLARK

      7788 SCOTT

      7839 KING

      7844 TURNER              0

      7876 ADAMS

      7900 JAMES

      7902 FORD

      7934 MILLER

已选择14行。

已用时间:  00: 00: 00.09

 

22:25:06 SQL> select empno,ename,comm from emp where comm=null;

未选定行

已用时间:  00: 00: 00.01

 

22:25:14 SQL> select empno,ename,comm from emp where comm <> null;

未选定行

已用时间:  00: 00: 00.01

 

22:25:21 SQL> select empno,ename,comm from emp where comm is null;

     EMPNO ENAME            COMM

----------  ----------            ----------

      7369 SMITH

      7566 JONES

      7698 BLAKE

      7782 CLARK

      7788 SCOTT

      7839 KING

      7876 ADAMS

      7900 JAMES

      7902 FORD

      7934 MILLER

已选择10行。

已用时间:  00: 00: 00.04

 

22:25:27 SQL> select empno,ename,comm from emp where comm is not null;

     EMPNO ENAME            COMM

---------- ----------             ----------

      7499 ALLEN             300

      7521 WARD              500

      7654 MARTIN           1400

      7844 TURNER              0

已用时间:  00: 00: 00.01

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
网易公司版权所有 ©1997-2009