Null是一个很特别的值,既不是0也不是空格.它的值是没有定义,不确定的未知值。
Null值的运算
AND运算表
True and NULL is NULL
False and NULL = False
NULL and NULL is NULL
OR运算表
True or NULL = True
False or NULL IS NULL
NULL OR NULL IS NULL
IN运算
select sal from emp where sal not in(800,null);
相当于:
select sal from emp where sal!=800 and sal!=null;
所以in中不要有null
计算
NULL值为未知不可以参与计算。如果要做运算,可以用NVL、NVL2、NVLIF函数先置为0
NVL(表达式1,表达式2)
如果表达式1是NULL,则返回表达式2
如果表达式1非NULL,则返回表达式1
表达式1和表达式2可以是数字,字符串,日期格式,1和2的数据类型必须一致
SQL> select ename,job,sal,comm,sal+NVL(comm,0) from emp where ename in ('SMITH','WARD'); ENAME JOB SAL COMM SAL+NVL(COMM,0) ---------- --------- ---------- ---------- --------------- SMITH CLERK 800 800 WARD SALESMAN 1250 500 1750
NVL2(expr1,expr2,expr3)
如果expr1为空,则返回expr3,否则返回expr2
SQL> select ename,job,sal,comm,sal+NVL2(comm,comm,0) from emp where ename in ('SMITH','WARD'); ENAME JOB SAL COMM SAL+NVL2(COMM,COMM,0) ---------- --------- ---------- ---------- --------------------- SMITH CLERK 800 800 WARD SALESMAN 1250 500 1750
NULLIF(expr1,expr2)
如果expr1和expr2相同,则返回空,否则返回expr1
SQL> select ename,NULLIF(ename,'KING') from emp where ename in ('SCOTT','KING'); ENAME NULLIF(ENA ---------- ---------- SCOTT SCOTT KING
COALESCE(expr1,expr2,expr3,...)
返回第一个非空的表达式
SQL> select coalesce('','a','','b') from dual; C - a SQL> select coalesce('','','','b') from dual; C - b