2.空值和比较操作符
(1)IS[NOT]NULL:是用来测试空值的唯一操作符(见"空值的测试")。
(2)=、!=、>=、<=、>、<
SQL >select ename,sal,comm from emp where sal >comm;
ENAME SAL COMM
-- - -
ALLEN 1600 300
WARD 1250 500
TURNER 1500 0
sal或comm为空值的行,sal>comm比较结果为NULL,所以凡是sal或comm为空值的行都没有返回。
(3)IN和NOTIN操作符
SQL >select ename,mgr from emp where mgr in (7902,NULL);
ENAME MGR
-- -
SMITH 7902
在上述语句中,条件"mgrin(7902,NULL)"等价于mgr=7902ormgr= NULL。对于表EMP中的任意一行,如果mgr为NULL,则上述条件等价于NULLORNULL,即为NULL;如果mgr为不等于7902的数值,则上述条件等价于FALSEORNULL,即为NULL;如果mgr等于7902,则上述条件等价于TRUEORNULL,即为TRUE。所以,最终结果能返回mgr等于7902的行。
SQL >select deptno from emp where deptno not in ('10',NULL);
no rows selected
在上述语句中,条件"deptnonotin('10',NULL)"等价于deptno!='10'anddeptno!=NULL,对于EMP表中的任意一行,条件的结果只能为NULL或FALSE,所以不返回行。
(4)any,some
SQL >select ename,sal from emp where sal > any(3000,null);
ENAME SAL
-- -
KING 5000
条件"sal>any(3000,null)"等价于sal>3000 or sal>null。类似前述(3)第一句,最终结果返回所有sal>3000的行。
(5)All
SQL >select ename,sal from emp where sal > all(3000,null);
no rows selected
条件"sal>all(3000,null)"等价于sal>3000 and sal>null,结果只能为NULL或FALSE,所以不返回行。
(6)(not)between
SQL >select ename,sal from emp where sal between null and 3000;
no rows selected
条件"sal between null and 3000"等价于sal>=null and sal<=3000,结果只能为NULL或FALSE,所以不返回行。
SQL >select ename,sal from emp where sal not between null and 3000;
ENAME SAL
-- -
KING 5000
条件"sal not between null and 3000"等价于sal 3000,类似前述(3)的第一句,结果返回sal>3000的行。
