在数据库中,空值用来表示实际值未知或无意义的情况。在一个表中,如果一行中的某列没有值,那么就称它为空值(NULL)。任何数据类型的列,只要没有使用非空(NOTNULL)或主键(PRIMARYKEY)完整性限制,都可以出现空值。在实际应用中,如果忽略空值的存在,将会造成造成不必要的麻烦。
例如,在下面的雇员表(EMP)中,雇员名(ENAME)为KING的行,因为KING为最高官员(PRESIDENT),他没有主管(MGR),所以其MGR为空值。因为不是所有的雇员都有手续费(COMM),所以列COMM允许有空值,除 300、500、1400、0以外的其它各行COMM均为空值。
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---- -------- -------- --------- -------- ------ ---------
7369 SMITH CLERK 7902 17-DEC-80 800 20
7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30
7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30
7566 JONES MANAGER 7839 02-APR-81 2975 20
7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30
7698 BLAKE MANAGER 7839 01-MAY-81 2850 30
7782 CLARK MANAGER 7839 09-JUN-81 2450 10
7788 SCOTT ANALYST 7566 09-DEC-82 3000 20
7839 KING PRESIDENT 17-NOV-81 5000 10
7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30
7876 ADAMS CLERK 7788 12-JAN-83 1100 20
7900 JAMES CLERK 7698 03-DEC-81 950 30
7902 FORD ANALYST 7566 03-DEC-81 3000 20
7934 MILLER CLERK 7782 23-JAN-82 1300 10
本文将以上述EMP表为例,具体讨论一下空值在日常应用中所具有的一些特性。
一、空值的生成及特点
1.空值的生成
如果一列没有非空(NOTNULL)完整性限制,那么其缺省的值为空值,即如果插入一行时未指定该列的值,则其值为空值。
使用SQL语句INSERT插入行,凡未涉及到的列,其值为空值;涉及到的列,如果其值确实为空值,插入时可以用NULL来表示(对于字符型的列,也可以用''来表示)。
例:插入一行,其EMPNO为1、ENAME为'JIA'、SAL为10000、job和comm为空值。
SQL >insert into emp(empno,ename,job,sal,comm)
values(1,'JIA',NULL,1000,NULL);
SQL >select * from emp where empno=1;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
--------- ---------- ---------
1 JIA 1000
可以看到新插入的一行,除job和comm为空值外,mgr、hiredate、deptno三列由于插入时未涉及,也为空值。
使用SQL语句UPDATE来修改数据,空值可用NULL来表示(对于字符型的列,也可以用''来表示)。例:
SQL >update emp set ename=NULL,sal=NULL where empno=1;
2.空值的特点
空值具有以下特点:
*等价于没有任何值。
*与0、空字符串或空格不同。
*在where条件中,Oracle认为结果为NULL的条件为FALSE,带有这样条件的select语句不返回行,并且不返回错误信息。但NULL和FALSE是不同的。
*排序时比其他数据都大。
*空值不能被索引。
