SQL技巧:NULL

在数据分析时,经常会听到空值或者null,那么这个到底是什么呢?说老王在分析员工年度工资的时候想了解每个员工的工资多少?那么我们可以工资加上奖金,于是老昝一行SQL语句自信满满交差去了select empno,sal+comm as "工资" from emp ;结果被剋了一顿,年终奖也没有了。那么为什么呢?从图1结果老昝恍然大悟了,吃一堑长一智,那么还有那些问题要注意的呢?是否还记得上篇文章在使用EXISTSNOT EXISTS 替代INTERSECTMINUS时,where条件注释掉的部分,为什么要注释呢?接下来,我们带着这个场景和疑问,慢慢了解下NULL

SQL技巧:NULL
图1

一.NULL 计算

1、NULL 和任何值 计算都是NULL

SQL技巧:NULL
图1.1 NULL计算

2、空值处理nvlnvl2decodecoalescecase when

SQL技巧:NULL
图1.2 空值处理
  • nvl(v1,v2):如果v1为 NULL,则函数返回v2,否则返回v1本身

  • nvl2(v1,v2,v3):它是在nvl函数的功能上扩展的,如果v1为 NULL,则函数返回v3,若v1不为 NULL,则返回v2

  • decode(v1,v2,v3,v4):当v1等于值v2时,该函数返回值v3,否则返回值v4。

  • decode(条件,值1,返回值1,值2,返回值2,…值n,返回值n,缺省值)SQL技巧:NULL

  • COALESCE(v1,v2):如果v1为 NULL,则函数返回v2,否则返回v1本身

  • case when:这个应该都很熟悉了,之前在行列转换的时候也用过的,不过多讲述。

二、null 筛选

1、=<>

SQL技巧:NULL
图2.1 null等于
SQL技巧:NULL
图2.2 null不等于

从图2.1和图2.2我们可以看出,不论时等于还是不等于都无法过滤空值的数据。

2、is nullis not null

SQL技巧:NULL
图2.3 is null
SQL技巧:NULL
图2.4 is not null

从图2.1和图2.2 可以看出,刷选空值和非空值 需要使用is nullis not null

3.null值在EXISTSNOT EXISTS

上篇中的where条件为什么要注释掉 emp.comm = emp1.comm? 我们先看下执行结果。

SQL技巧:NULL
图3.1 有注释
SQL技巧:NULL
图3.2 未注释

从上面执行结果来看,我们需要的是图3.1 的数据,那为什么去掉注释会出现图3.2的结果呢?空值在数据库中表示未知,没有实际意义。说老昝今年的年终奖为空老昝今年的年终奖为0。从业务角度去看大腾今年是没有年终奖的,但是从分析角度开看前者是老昝今年没有年终奖,后者则是老昝今年的年终奖是0元。

SQL技巧:NULL
图3.3 null值比较

从执行结果上看 在 Oracle 中,NULL 与任何其他值的比较结果都是未知。这意味着包含 NULL 的表达式将返回 NULL,而不是 TRUE 或 FALSE。

4、null值排序

null值在排序的时候,默认是最高位

SQL技巧:NULL
图4.1

5、null值聚合

在使用聚合函数(如 COUNT, SUM, AVG 等)时,Oracle 会忽略 NULL 值。例如,COUNT(column)将返回表中非 NULL 值的数量,而不是行的总数。

SQL技巧:NULL
图5.1 null 聚合

结语

Oracle 中的 NULL 是一个相当复杂而重要的概念,理解它的含义和如何操作它对于有效地使用 Oracle 数据库至关重要。此外,熟悉如何处理包含 NULL 值的索引和查询能够帮助我们优化性能和避免可能的错误。

无论你是正在学习 SQL ,还是已经是一名经验丰富的数据库管理员,都应该花时间去深入理解和掌握 NULL 的相关知识。因为在日常工作中,我们难免会遇到需要处理或者分析缺失数据的情况。这时候,如果我们能够正确并熟练地使用 NULL,就能更好地完成任务,提升效率。


原文始发于微信公众号(运维小九九):SQL技巧:NULL

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/218452.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!