数据库空值(Null)小结
1.定义空(Null)值
空值是一个不可用的,没有被分配的, 或者不能得到的值.空值不同于零或者空格.
2.在算术表达式中的空值
在算术表达式中,与空值运算的结果为空。
SQL> ed
已写入 file afiedt.buf
1 SELECT last_name,12* salary, 12*salary*(1+commission_pct)
2* FROM employees
SQL> /
如果commission_pct列有空值,则即使salary不可能是空,但是12*salary*(1+commission_pct)也是一个空值
解决方法:使用nvl(可能有空值的列,如果是空值用什么值代替)
SQL> ed
已写入 file afiedt.buf
1 SELECT last_name,12*salary,12*salary*(1+nvl(commission_pct,0))
2* FROM employees
SQL> /
3.使用IS NULL运算符
SQL> select last_name,manager_id from employees
2 where manager_id is null;
4.空值也会带来一些算法的改变,会使快速索引访问失效
Employees表的manager_id列建有索引
SQL> set autotrace trace exp
SQL> select last_name,manager_id from employees
2 where manager_id =201;
在下面的语句中,没有使用索引,设想全国有13亿人,manager_id的领导很少,去找的时候不用索引,可想而知这个查询多么花费时间,解决方法是在空值的地方,放一个区别于正常数据的值
SQL> select last_name,manager_id from employees
2 where manager_id is null;
5.NVL函数
用法:NVL(可能有空值的列,如果是空值用什么值代替). 数据类型可以是日期、字符、或者数字. 数据类型必须匹配:例如
NVL(commission_pct,0)
NVL(hire_date,'01-JAN-97')
NVL(job_id,'No Job Yet')