您当前的位置:首页 > 新闻 > 科技

SQL中这些与NULL有关的细节,你知道吗?

时间:2020-03-15 13:13:25  来源:  作者:

NULL是SQL常见的关键字之一,表示“空,无”的意思。它在SQL中是一种独特的存在,今天来汇总一下与它相关的知识点,看看这些你都知道吗?


先贴一下我们的原始数据,是一个只有1列的表,表名为example,很简单:

SQL中这些与NULL有关的细节,你知道吗?

 

 

1.NULL是一种特殊的值,对某字段使用distinct 关键字时,NULL和一般值一样,都会排重,只保留一个值。

SQL中这些与NULL有关的细节,你知道吗?

 

2.不能对NULL值使用比较运算符

直白地讲,不能对null值使用等号(=)或者不等号(!=)进行比较,要使用is null 和 is not null。

SQL中这些与NULL有关的细节,你知道吗?

 

有一种情况需要注意,假设我们需要取col不为2的所有col值,包括null。不能只写where col <> '2',因为这样的写法不会包括NULL值。我们需要写成where col <> '2' or col is null。

 

SQL中这些与NULL有关的细节,你知道吗?

 

3.count(*)会统计null值,count(列名)不包括null值。

 

SQL中这些与NULL有关的细节,你知道吗?

 

4.含NULL值的运算结果都为NULL,如下面图所示(点击查看大图)

SQL中这些与NULL有关的细节,你知道吗?

 

 

5.使用sum函数和avg函数时,相应列中包含NULL的,会发生什么?

SQL中这些与NULL有关的细节,你知道吗?

 

sum和avg函数作用于含有NULL的列,NULL值不参与计算。上面图中,sum(col) 是1+2+2+3=8。avg(col) 是(1+2+2+3)/4=2,注意分母是4而不是6。如果需要将NULL值当作0值参与到运算中,可以用case when的方式进行判断赋值。

select sum(case when col is null then 0 else col end) from example;#结果是8
select avg(case when col is null then 0 else col end) from example;#分母是6,结果是1.33

除此外,在使用max,min时,也会忽略NULL值。事实上,聚合函数如果以列名为参数,那么在计算之前就会把NULL 排除在外。

6.如果某列含有null,使用group by 进行聚合时,null值会单独保留一行。

这一点和第一点有点类似,见下面代码。

SQL中这些与NULL有关的细节,你知道吗?

 

7.null占用的空间是多少?

SQL中这些与NULL有关的细节,你知道吗?

 

我们在原数据的基础上插入了一行空字符串的数据。然后来看每一个值所占用的空间。可以看到,NULL所占的空间是NULL,是占用空间的,而空字符串长度是0,是不占用空间的。

NULL columns require additional space in the row to record whether their values are NULL.

NULL列需要行中的额外空间来记录它们的值是否为NULL。

有一个比喻很恰当:空值就像是一个真空状态杯子,什么都没有,而NULL值就是一个装满空气的杯子,虽然看起来都是一样的,但是有着本质的区别。

补充说明:对于空值的判断需要用=,!= 等算数运算符,而NULL值不行。count等聚合函数会忽略NULL值,但不会忽略空值。

8.对NULL进行排序,结果如何?

SQL中这些与NULL有关的细节,你知道吗?

 

上面的结果,升序排序,NULL在最开头,但这并不能说明NULL比1小,因为我们前面提到是不能对NULL使用比较运算符的。这里的结果只是把NULL放在了开头显示,可能在另外的数据库中,会统一放到结尾显示。

 

9.大多数函数作用于NULL,结果都是NULL,如concat函数,abs函数等。但COALESCE函数除外,它返回第一个不为NULL的值。我们常会看到的NVL函数是该函数的简化版本,类似的函数还有IFNULL。

SELECT COALESCE(NULL, 1) AS col_1,
COALESCE(NULL, 'test', NULL) AS col_2,
COALESCE(NULL, NULL, '2009-11-01') AS col_3;
--结果:1 test 2009-11-01

 

10.NULL的其他作用

NULL多用在字段约束中,如非空约束可以用NOT NULL表示。NULL经常用在case表达式中的ELSE子句中:case when <条件> else NULL end,else的部分也可以不写,但为了易读性,还是建议写。

 

小结

对NULL常用的知识点总结如下面的思维导图,欢迎大家补充。(在有些地方看到了在插入和更新数据时NULL的注意事项和索引相关的知识,由于用的比较少,就不放在这里了,可以参考文末链接自行学习)

SQL中这些与NULL有关的细节,你知道吗?


Tags:SQL   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
1增1.1【插入单行】insert [into] <表名> (列名) values (列值)例:insert into Strdents (姓名,性别,出生日期) values (&#39;开心朋朋&#39;,&#39;男&#39;,&#39;1980/6/15&#3...【详细内容】
2021-12-27  Tags: SQL  点击:(2)  评论:(0)  加入收藏
作者:雷文霆 爱可生华东交付服务部 DBA 成员,主要负责Mysql故障处理及相关技术支持。爱好看书,电影。座右铭,每一个不曾起舞的日子,都是对生命的辜负。 本文来源:原创投稿 *爱可生...【详细内容】
2021-12-24  Tags: SQL  点击:(7)  评论:(0)  加入收藏
前言JDBC访问Postgresql的jsonb类型字段当然可以使用Postgresql jdbc驱动中提供的PGobject,但是这样在需要兼容多种数据库的系统开发中显得不那么通用,需要特殊处理。本文介绍...【详细内容】
2021-12-23  Tags: SQL  点击:(13)  评论:(0)  加入收藏
最近发现还有不少做开发的小伙伴,在写存储过程的时候,在参考已有的不同的写法时,往往很迷茫, 不知道各种写法孰优孰劣,该选用哪种写法,以及各种写法的优缺点,本文以一个简单的查询...【详细内容】
2021-12-23  Tags: SQL  点击:(9)  评论:(0)  加入收藏
场景描述:由于生产环境的表比较复杂,字段很多。这里我们做下简化,只为说明今天要聊的问题。有两张表 tab1,tab2: tab1 数据如下: tab2 数据如下: 然后给你看下,我用来统计 name=&#3...【详细内容】
2021-12-20  Tags: SQL  点击:(7)  评论:(0)  加入收藏
概述我们知道SQL Server是微软公司推出的重要的数据库产品,通常情况下只支持部署在windows平台上。不过令人感到兴奋的是,从SQL Server 2017开始支持 linux系统。此 SQL Serve...【详细内容】
2021-12-17  Tags: SQL  点击:(13)  评论:(0)  加入收藏
读取SQLite数据库,就是读取一个路径\\192.168.100.**\position\db.sqlite下的文件<startup useLegacyV2RuntimeActivationPolicy="true"> <supportedRuntime version="v4.0"/...【详细内容】
2021-12-16  Tags: SQL  点击:(21)  评论:(0)  加入收藏
前言知识无底,学海无涯,知识点虽然简单,但是比较多,所以将MySQL的基础写出来,方便自己以后查找,还有就是分享给大家。一、SQL简述1.SQL的概述Structure Query Language(结构化查...【详细内容】
2021-12-16  Tags: SQL  点击:(13)  评论:(0)  加入收藏
一、为什么要搭建主从架构呢1.数据安全,可以进行数据的备份。2.读写分离,大部分的业务系统来说都是读数据多,写数据少,当访问压力过大时,可以把读请求给到从服务器。从而缓解数据...【详细内容】
2021-12-15  Tags: SQL  点击:(12)  评论:(0)  加入收藏
前言作为一名测试工程师,工作中在对测试结果进行数据比对的时候,或多或少要和数据库打交道的,要和数据库打交道,那么一些常用的 SQL 查询语法必须要掌握。最近有部分做测试小伙...【详细内容】
2021-12-14  Tags: SQL  点击:(15)  评论:(0)  加入收藏
▌简易百科推荐
非法购买公民信息、开发人脸认证规避技术&hellip;&hellip;今年年初,广东省公安厅网安部门侦破全国首例破解“青少年防沉迷系统”的新型网络犯罪案件,抓获犯罪嫌疑人13名,查处非...【详细内容】
2021-12-28    人民日报客户端  Tags:数据安全步   点击:(5)  评论:(0)  加入收藏
就在今天,腾讯方面宣布将在2022年1月31日下架企业QQ和营销QQ,其实这一消息的降临并不让笔者意外,因为早在今年的10月28日20点之后,企业QQ和营销QQ就被停止了续费服务。相信很多...【详细内容】
2021-12-27  科技探险家    Tags:企业QQ   点击:(21)  评论:(0)  加入收藏
日前,上海交通大学发布《全球电竞之都评价报告》,对全球15个致力于发展电竞之都的城市进行评价,上海作为中国城市电竞发展的排头兵,其拥有众多优质电竞企业及完整产业集群,因此排...【详细内容】
2021-12-27  经济日报    Tags:电竞   点击:(3)  评论:(0)  加入收藏
为优化网络氛围环境,微博又开始整顿用户信息了。本月月初,微博官方发布公告,要求昵称中带有如“二货”“SB”“瘪三”“娘炮”等明显低俗或侮辱性词汇的用户尽快修改,否则将面临...【详细内容】
2021-12-24  运了个营    Tags:微博   点击:(10)  评论:(0)  加入收藏
昨日谷歌宣布,自2022年12月19日开始停止对OnHub的软件支持,OnHub路由器仍将提供Wi-Fi信号,但用户无法用谷歌Home应用程序管理它。无法更新Wi-Fi网络设置、添加额外的Wifi设备或...【详细内容】
2021-12-22  雷峰网    Tags:Google OnHub   点击:(5)  评论:(0)  加入收藏
IT之家 12 月 20 日消息,百度网盘青春版 iOS 客户端今日晚间率先开启内测,安卓客户端将在稍后内测。使用苹果 iPhone 的IT之家小伙伴可以点此下载内测版,需要先下载 TestFlight...【详细内容】
2021-12-21  IT之家    Tags:百度网盘   点击:(10)  评论:(0)  加入收藏
对于拼车单,是接还是不接,不少网约车司机表示很矛盾。接吧,钱少事多,常常跑了个寂寞,不接吧,车多客少,挑三拣四没饭吃。 在平台大力推广拼车单之下,不少司机迫于生活压力,最终还是打...【详细内容】
2021-12-17  网约车情报分享    Tags:滴滴   点击:(9)  评论:(0)  加入收藏
蓝鲸TMT频道12月16日讯,据饿了么官方微信公众号,近日,在圆桌会上,蓝骑士与平台交流了配送安全问题。饿了么表示,线上将技术手段融入安全防护;线下将持续进行安全培训,并试点智能头...【详细内容】
2021-12-17    金融界  Tags:饿了么   点击:(24)  评论:(0)  加入收藏
开源最前线(ID:OpenSourceTop) 猿妹编译项目地址: https://github.com/restic/restic全球知名代码托管平台 GitHub 今天就重磅发布了今年的年度报告&mdash;&mdash;《2021 年度 O...【详细内容】
2021-12-17  Python部落    Tags:   点击:(9)  评论:(0)  加入收藏
新京报快讯 据中国网络视听节目服务协会网站消息,12月15日,中国网络视听节目服务协会发布了《网络短视频内容审核标准细则》(2021)。中国网络视听节目服务协会组织有关短视频平...【详细内容】
2021-12-16    新京报  Tags:短视频   点击:(11)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条