前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【DB笔试面试477】NULL有哪些注意事项?

【DB笔试面试477】NULL有哪些注意事项?

作者头像
AiDBA宝典
发布2019-09-30 16:31:46
4970
发布2019-09-30 16:31:46
举报
文章被收录于专栏:小麦苗的DB宝专栏
题目部分

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)返回为空。示例如下:

代码语言:javascript
复制
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程序员面试笔试宝典》,作者:李华荣。

About Me:小麦苗

● 本文作者:小麦苗,只专注于数据库的技术,更注重技术的运用

● 作者博客地址:http://blog.itpub.net/26736162/abstract/1/

● 本系列题目来源于作者的学习笔记,部分整理自网络,若有侵权或不当之处还请谅解

● 版权所有,欢迎分享本文,转载请保留出处

● 题目解答若有不当之处,还望各位朋友批评指正,共同进步

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-01-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DB宝 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档