sql指南之null值用法
注明:参考文章:
SQL避坑指南之NULL值知多少?_select null as-CSDN博客文章浏览阅读2.9k次,点赞7次,收藏21次。0 引言 SQL NULL(UNKNOW)是用来代表缺失值的术语,在表中的NULL值是显示为空白字段的值,用作不知道数据的具体值,或者不知道数据是否存在,或者数据不存在等情况。NULL值在SQL中普遍存在,想必大多数程序员对其有所了解,但是对于NULL值在SQL中贯穿体现及相关细节,是否会有人注意到呢?本文将对SQL中NULL值的一些使用细节进行研究,让你在使用过程中避开NULL值的坑,..._select null ashttps://blog.csdn.net/godlovedaniel/article/details/104860042
0 概要
sql null(unknow) 是用来代表缺失值或无意义的术语,表中的null值显示为空白字段的值。
1 null值用途
(1)被定义为缺失值
(2)被定义为无意义的值
(3)不存在的值
(4)不确定性值
(5)建表语句中作为非空约束
2 数据准备
create table if not exists table_null
(id int comment 'id',name string comment '名称'
) comment 'null值测试表';insert overwrite table table_null values
(1,'吱吱'),
(2,'嘎巴'),
('',''),
(4,''),
(null,null),
(6,null),
(null,'');
3 null使用场景
3.1 null值的比较
对null进行判断时,只能用is null或is not null,不能采用 =, <, <>, != 等这些操作符
例如经过如下操作:
select * from table_null where id <> '1';
输出结果为:

该条语句正常返回应该是6条数据,但是结果只有3条,说明id为null的值并没有返回,null的判断有其特殊的语法。接下来,进行校验:
select * from table_null where id <> '1' or id is null;
查看结果是:
此时结果才是符合预期。
一般筛选出name不为null,有两种sql表示方法:
第一种:
select * from table_null where name != null;
没报错但结果明显不对
第二种:
select * from table_null where name is not null;

可以看到结果符合预期。
3.2 null与聚合函数的运算
1.count(*)操作时会统计null值,count(column)会过滤掉null值;
2.事实上除了count(*)计算,剩余的聚合函数例如: max(column),min(column),avg(column),count(column) 函数会过滤掉null值
3.3 null值参与算数运算
与null值进行算数运算时,其操作结果都是null
(1) select 1+ null
(2) select 1*null
(3) select 1/null
(4) select null*0
3.4 null值参与group by分组
此时null值会被单独作为一个列进行分组
具体例子:
select name,count(*) from table_null group by name;
3.5 null值参与distinct计算
此时null会参与计算,会进行去重,过滤后会有一个null值
举例:
select distinct (name) from table_null;
输出结果为:

可以看到null只也参与去重了
3.6 null值参与排序运算
排序时null也会参与运算,在myql中升序排序时,null值被排在最前面,降序排序时null时会被排在最后。
select name from table_null order by name desc;

3.7 null与功能函数配合使用
例如concat()函数等
select id,name,concat(name,'_',id) from table_null
结果如下:

3.8 null在建表语句中作为非空约束
3.9 null值的转换
如果null参与运算,一般需要对null进行转换,主要有以下函数完成:
hive中的nvl()函数
hive中的coalease()函数
mysql中的ifnull()函数等
举例:
select name,coalesce(name,'null') as name1 from table_null;
select name,nvl(name,'null') from table_null;
输出结果:

3.10 null值的底层存储
null值本身是占用存储空间的,hive中以'/N' 进行存储。以mysql数据库为例验证null值大小
select name,length(name) from table_null;
mysql中的null是占用空间的,在创建表的时候尽量把字段的默认值设置成not null,除非是想存储null值。因为在mysql中为null的字段不会走索引,做统计的时候也会直接被忽略掉,如果想统计进去,借助函数进行清洗转换,例如:nvl()函数、 coalease()函数、ifnull()函数等。 null值其实是有东西的,但不显示,只是给个标志,代表无意义的值等。空值''是不占用空间的,''表示空值里面没有值。
3.11 null与空值''区别
1)null在聚合函数(sum,avg,min,max,avg)中会被直接过滤掉,而''不会被过滤掉
2)对于null的判断需要is null或is not null, 而''则需要= 或者 !=, <>
3)null占用存储空间,''不占用存储空间
4 踩坑案例
t1表和t2表的字段如图

计算以下sql的输出结果?
with t1 as (select 1 as id union allselect 2 as id union allselect 3 as id
),t2 as (select 1 as id union allselect 2 as id union allselect 2 as id)select t1.id,t2.id
from t1
left join t2 on t1.id = t2.id
从
输出结果为:

解析: where后面跟着的是对右表的限制条件 where t2.id <>2;
结论:在最后临时表的基础上进行筛选,返回符合where过滤条件的行;
注意: sql中比较的结果一般有:true, false, null; 而where条件只会过滤出true的结果。再一次验证了以下结论:
对null进行判断时,只能用is null或is not null,不能采用 =, <, <>, != 等这些操作符

5 小结
该篇文章主要对null值使用的方法和细节进行了归纳总结。
相关文章:
sql指南之null值用法
注明:参考文章: SQL避坑指南之NULL值知多少?_select null as-CSDN博客文章浏览阅读2.9k次,点赞7次,收藏21次。0 引言 SQL NULL(UNKNOW)是用来代表缺失值的术语,在表中的NULL值是显示…...
常见消息队列:ActiveMQ、RabbitMQ、RocketMQ、Kafka的区别总结
目录 前言 1、常见消息队列 1.ActiveMQ 2.RabbitMQ 3.RocketMQ 4.Kafka 2、区别 1.消息传递模型 2.消息持久化 3.消息顺序性 4.可靠性 5.生态系统和社区支持 6.表格对比 前言 消息队列可以实现应用程序之间的异步通信,能够实现异步消息的发送和接收&am…...
火柴人大逃亡
欢迎来到程序小院 火柴人大逃亡 玩法:左右两边火柴人,点击左边左边火柴人跳跃,点击右边右边跳跃, 上下快速移动道路,躲过障碍物,看你能坚持多久,快去火柴人大逃亡吧^^。开始游戏https://www.or…...
AI革命新篇章:法国天才团队挑战ChatGPT霸主地位
Mistral AI: Guillaume Lample, Arthur Mensch et Timothe Lacroix. ChatGPT 的霸主地位已被三位来自法国的天才所颠覆!如上图这三个人,其中一位曾在 DeepMind 工作,另外两位来自 Meta,他们联手为 AI 领域带来了革命性的变革 我…...
数据双向绑定v-modal
v-model v-model就实现了双向数据绑定,实际上它就是通过Vue提供的事件机制。即在子组件通过$emit()触发一个事件,在父组件使用v-on来监听对应的事件并修改相应的数据。 input的v-model就是通过<input :value"value" input"input"…...
Docker 容器jar 运行报错 at sun.awt.FontConfiguration.getVersion 解决方法
docker jar 运行报错 at sun.awt.FontConfiguration.getVersion 初步判断是在运行 Docker 容器中的 JAR 文件时遇到了与字体配置相关的问题。这个问题可能是由于容器内缺少字体配置或字体文件而引起的。 要解决这个问题,你可以尝试以下方法: 1.安装字…...
光学3D表面轮廓仪服务超精密抛光技术发展
随着技术的不断进步,精密制造领域对材料表面的处理要求越来越高,超精密抛光技术作为当下表面处理的尖端技术,对各种高精密产品的生产起到了至关重要的作用,已广泛应用于集成电路制造、医疗器械、航空航天、3C电子、汽车、精密模具…...
详解C++中auto关键字
auto关键字 auto关键字(C11)类型别名思考auto简介auto的使用细则auto与指针和引用结合起来使用在同一行定义多个变量 auto不能推导的场景1.auto不能作为函数的参数2.auto不能直接用来声明数组 auto关键字(C11) 类型别名思考 随着程序越来越复杂,程序中用到的类型也…...
24.云原生ArgoCD高级之数据加密seale sealed
云原生专栏大纲 文章目录 数据加密之seale sealedBitnami Sealed Secrets介绍Bitnami Sealed Secrets工作流程安装sealed-secrets和kubeseal安装sealed-secrets-controller安装kubeseal通过kubeseal将sealed-secrets公钥拿出来通过kubeseal加密secrets替换kustomize下secret为…...
线性代数:线性方程组
目录 一、线性方程组概念 二、消元法求线性方程组 三、系数阵的秩与线性方程组的解 无解 唯一解 无数解 相关定理 一、线性方程组概念 二、消元法求线性方程组 三、系数阵的秩与线性方程组的解 无解 唯一解 无数解 相关定理...
标准的排序组合-算法
题目 有若干个字母,要求计算出长度为4的所有可能得组合 解题 排序组合最适用的就是回溯了,建议大家本地debug一层一层的看能好理解点 private static void getResult(List<String> source, Stack<String> temp, int curLength, int maxL…...
2402C++,C++递归取各种节点名字
参考 explicit FindNamedClassVisitor(ASTContext *Context) : Context(Context) {}元<类 T>极 动作(T&e){串 ae->getQualifiedNameAsString();d.加(a);中 真;} bool VisitCXXRecordDecl(CXXRecordDecl *e) {中 动作(e);} bool VisitFunctionDecl(FunctionDecl*e…...
Qt 5.9.4 转 Qt 6.6.1 遇到的问题总结(三)
1.QSet: toList 中的toList 函数已不存在,遇到xx->toList改成直接用,如下: 2.开源QWT 图形库中QwtDial中的 setPenWidth 变成 setPenWidthF函数。 3.QDateTime 中无setTime_t 改为了setSecsSinceEpoch函数。 4.QRegExp 类已不存在 可以用Q…...
Logstash 7.7.1版本安装系统梳理
前言 上一篇文章介绍了 《ElasticSearch7.7.1集群搭建 & Kibana安装》,今天说一下 Logstash的安卓和配置; Logstash是一个开源的数据收集引擎,具有实时管道功能。它可以动态地将来自不同数据源的数据统一起来,并将数据标准化…...
4. sass实用函数归纳
4. sass实用函数归纳 字符串函数 1、quote(string) 给字符串添加引号 quote(xiaoming) // "xiaoming"2、unquote(string) 移除字符串的引号 unquote("xiaoming") // xiaoming3、str-index(string, substring) 返回 substring 子字符串第一次在 stri…...
《元梦之星》赛季更新带来“新”内容,为何却被玩家集体声讨?
前段时间,《元梦之星》迎来了“山海奇遇”赛季的重磅更新,诸多“新”内容的上线吸引了很多玩家们的关注,然而在新版本开启之后没有多,新玩法新时装甚至是游戏中的新改动都引起了不少玩家的不满。 在新赛季开启之后,玩家…...
故障诊断 | 一文解决,CNN-SVM卷积神经网络-支持向量机组合模型的故障诊断(Matlab)
效果一览 文章概述 故障诊断 | 一文解决,CNN-SVM卷积神经网络-支持向量机组合模型的故障诊断(Matlab) 模型描述 卷积神经网络(Convolutional Neural Network,CNN)和支持向量机(Support Vector Machine,SVM)是两种常用的机器学习算法,它们在不同领域和任务中都表现出…...
菜鸡后端的前端学习记录-2
前言 记录一下看视频学习前端的的一些笔记,以前对Html、Js、CSS有一定的基础(都认得,没用过),现在不想从头再来了,学学Vue框架,不定时更新,指不定什么时候就鸽了。。。。 忘了记一下…...
Layui + Echarts 5.0
Layui 怎么整合最新版本的 Echarts 5.0,Echarts 4 升级到 5后,有了很大改变,新的配置项4是无法兼容的,所以想要使用新的功能,都需要升级! 新建一个echarts.js文件 layui.define(function (exports) {// 这…...
linux使用iptables禁用ip
iptables是什么? iptables 是一个强大的开源软件,它是 Linux 系统内核中 netfilter 包过滤框架的一部分,用来实现防火墙功能。iptables 提供了一种灵活的方式来控制和管理进出以及通过 Linux 计算机的网络流量。 前提 我在云服务器上用doc…...
《Linux网络编程》2.Socket编程(UDP/TCP)
💡Yupureki:个人主页 ✨个人专栏:《C》 《算法》《Linux系统编程》《高并发内存池》《MySQL数据库》 《个人在线OJ平台》《Linux网络编程》 🌸Yupureki🌸的简介: 目录 1. UDP编程 1.1 常用接口 1.1.1 socket() – 创建套接字 1.1.2 bin…...
解决Ubuntu中libc6-dev:i386依赖问题的完整指南
1. 理解libc6-dev:i386依赖问题的本质 当你正在愉快地使用Ubuntu系统,突然在执行sudo apt-get upgrade时遇到一堆红色错误提示,特别是看到"libc6-dev:i386 : 依赖: libc6:i386 ( 2.31-0ubuntu9.14) 但无法安装它"这样的报错,是不是…...
OFA图像描述效果展示:COCO风格caption生成——简洁、准确、自然
OFA图像描述效果展示:COCO风格caption生成——简洁、准确、自然 1. 项目概述 今天要给大家展示一个特别实用的AI工具——基于OFA模型的图像描述生成系统。这个工具能够自动为任何图片生成简洁、准确、自然的英文描述,就像给图片配上了专业的文字说明。…...
LoRaFi库详解:面向SX1272/SX1273的Arduino LoRa通信开发指南
1. 项目概述LoRaFi 是一款面向 Arduino 平台的 LoRa 无线通信库,专为基于 Semtech SX1272/SX1273 射频芯片的硬件平台设计,核心适配对象为 LoRaFi 开发板(含配套扩展板/模块)。该库并非通用 LoRa 协议栈,而是聚焦于物理…...
Legacy iOS Kit终极指南:让你的旧iPhone/iPad重获新生!
Legacy iOS Kit终极指南:让你的旧iPhone/iPad重获新生! 【免费下载链接】Legacy-iOS-Kit An all-in-one tool to restore/downgrade, save SHSH blobs, jailbreak legacy iOS devices, and more 项目地址: https://gitcode.com/gh_mirrors/le/Legacy-i…...
BilibiliDown:如何轻松搞定B站视频下载与批量管理的完整指南
BilibiliDown:如何轻松搞定B站视频下载与批量管理的完整指南 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader 😳 项目地址: https://gitcode.com/gh_mir…...
AA-PEG-VE,AA-PEG-Vitamin E,用于修饰蛋白质、多肽以及其他含有氨基的材料
一.名称英文名:AA-PEG-VE,AA-PEG-Vitamin E,Acetic Acid-PEG-VE,Acetic Acid-PEG-Vitamin E,Vitamin E-PEG-AA中文名:乙酸聚乙二醇维生素E,乙酸-PEG-维生素E,维生素E-PEG-乙酸分子量…...
宝塔面板备份翻车实录:我是如何用rclone+阿里云OSS实现自动化异地容灾的
宝塔面板数据安全实战:从备份翻车到自动化异地容灾 凌晨三点,服务器硬盘的物理损坏警报声把我从睡梦中惊醒。登录宝塔面板后,眼前一片空白——过去半年的网站数据与客户资料全数消失。更讽刺的是,前一天刚执行过本地备份ÿ…...
GPU集群网络优化实战:万兆以太网 vs InfiniBand,哪种更适合你的AI训练任务?
GPU集群网络优化实战:万兆以太网 vs InfiniBand,哪种更适合你的AI训练任务? 在构建高性能GPU集群时,网络架构的选择往往成为决定整体性能的关键因素。想象一下,当你的AI模型需要处理海量参数更新时,网络带宽…...
从零开始掌握drawio:免费开源绘图工具的全方位指南
1. 为什么你需要drawio这款绘图神器 第一次接触drawio是在三年前的一个项目会议上,当时团队需要快速绘制一套系统架构图。同事随手打开浏览器输入app.diagrams.net,五分钟内就搭建出了清晰的流程图框架。那一刻我才发现,原来专业绘图可以如此…...




