NULL有哪些注意事项?
♣ 答案部分
在运算时,NULL(空)值不参与运算。判断是否为NULL值只能用IS NULL或IS NOT NULL,不能用=NULL或<>NULL,有关NULL值有如下几点需要注意:
① 空值是无效的、未指定的、未知的或不可预知的值。
② 空值不是空格,也不是0。
③ 包含空值的数学表达式的值(即加减乘除等操作)都为空值NULL。
④ 对空值进行连接字符串的操作之后,返回被连接的字符串。
⑤ 用IS NULL来表示为空,用IS NOT NULL来表示不为空,除此之外没有其它的表示方法了,这一点尤为重要。
⑥ COUNT(1)、COUNT(*)、COUNT(ROWID)、COUNT(常量)、COUNT(主键)、COUNT(非空列)这几种方式统计的行数是表中所有存在的行的总数,包括值为NULL的行和非空行。所以,这几种方式的执行结果相同。通过10053事件可以看到这几种方式除了COUNT(ROWID)之外,其它最终都会转换成COUNT(*)的方式来执行。需要注意的是:这里的COUNT(1)中的“1”并不表示表中的第一列,它其实是一个表达式,可以换成任意数字或字符或表达式。
a.COUNT(允许为空列) 这种方式统计的行数不会包括字段值为NULL的行。
b.COUNT(DISTINCT 列名) 得到的结果是除去值为NULL和重复数据后的结果。
⑦ NULL在排序中默认为最大值,DESC在最前,ASC在最后,可以加上NULLS LAST来限制NULL值的显示。
⑧ 如果子查询结果中包含NULL值,那么NOT IN (NULL、AA、BB、CC)返回为空。示例如下:
SYS@lhrdb> SELECT COMM,COUNT(1) FROM SCOTT.EMP GROUP BY COMM;
COMM COUNT(1)
---------- ----------
10
1400 1
500 1
300 1
0 1
SYS@lhrdb> SELECT B.EMPNO, B.COMM FROM SCOTT.EMP B WHERE B.SAL IN (800,1600);
EMPNO COMM
---------- ----------
7369
7499 300
SYS@lhrdb> SELECT * FROM SCOTT.EMP A WHERE A.COMM NOT IN (SELECT B.COMM FROM SCOTT.EMP B WHERE B.SAL IN (800,1600)) ;
no rows selected
SYS@lhrdb> SELECT * FROM SCOTT.EMP A WHERE A.COMM NOT IN (SELECT B.COMM FROM SCOTT.EMP B WHERE B.SAL IN (800,1600) AND B.COMM IS NOT NULL ) ; --正确写法
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- ------------------- ---------- ---------- ----------
7521 WARD SALESMAN 7698 1981-02-22 00:00:00 1250 500 30
7844 TURNER SALESMAN 7698 1981-09-08 00:00:00 1500 0 30
7654 MARTIN SALESMAN 7698 1981-09-28 00:00:00 1250 1400 30
在SCOTT.EMP表,除了COMM为空和300的记录还有COMM为1400、500和0的记录。
本文选自《Oracle程序员面试笔试宝典》,作者:李华荣。
---------------优质麦课------------
详细内容可以添加麦老师微信或QQ私聊。
● 本文作者:小麦苗,只专注于数据库的技术,更注重技术的运用
● 作者博客地址:http://blog.itpub.net/26736162/abstract/1/
● 本系列题目来源于作者的学习笔记,部分整理自网络,若有侵权或不当之处还请谅解
● 版权所有,欢迎分享本文,转载请保留出处
● QQ:646634621 QQ群:618766405
● 提供OCP、OCM和高可用部分最实用的技能培训
● 题目解答若有不当之处,还望各位朋友批评指正,共同进步
长按下图识别二维码或微信扫描下图二维码来关注小麦苗的微信公众号:xiaomaimiaolhr,学习最实用的数据库技术。
本文分享自微信公众号 - DB宝(lhrdba)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。