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值使用的方法和细节进行了归纳总结。

   

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/249808.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

rasa3.X 自定义action的注册问题

rasa3.X 自定义action的注册问题 文章目录 rasa3.X 自定义action的注册问题前言一、问题重述 前言 幸好在这之前抽时间稍微看了一点django源码&#xff0c;让我对于python的导入机制有了一个概念。虽然还不是很确切的知道python import机制&#xff0c;不过在看到类似_import_…

【算法】拦截导弹(线性DP)

题目 某国为了防御敌国的导弹袭击&#xff0c;发展出一种导弹拦截系统。 但是这种导弹拦截系统有一个缺陷&#xff1a;虽然它的第一发炮弹能够到达任意的高度&#xff0c;但是以后每一发炮弹都不能高于前一发的高度。 某天&#xff0c;雷达捕捉到敌国的导弹来袭。 由于该系…

响应式Web开发项目教程(HTML5+CSS3+Bootstrap)第2版 例4-11 HTML5 表单验证

代码 <!doctype html> <html> <head> <meta charset"utf-8"> <title>HTML5 表单验证</title> </head><body> <form action"#" method"get" novalidate>请输入您的邮箱:<input type&q…

Elasticsearch:将文档级安全性 (DLS) 添加到你的内部知识搜索

作者&#xff1a;来自 Elastic Sean Story 你的企业很可能淹没在内部数据中。 你拥有问题跟踪、笔记记录、会议记录、维基页面、视频录制、聊天以及即时消息和私信。 并且不要忘记电子邮件&#xff01; 难怪如此多的企业都在尝试创造工作场所搜索体验 - 为员工提供集中、一站…

【知识点】Java常用

文章目录 基础基础数据类型内部类Java IOIO多路复用重要概念 Channel **通道**重要概念 Buffer **数据缓存区**重要概念 Selector **选择器** 关键字final 元注解常用接口异常处理ErrorException JVM与虚拟机JVM内存模型本地方法栈虚拟机栈 Stack堆 Heap方法区 Method Area (JD…

视频压缩很简单,只需看这几个!【无损压缩】

在当今数字化的时代&#xff0c;视频成为了信息传递、娱乐和沟通的重要媒介。然而&#xff0c;随着高清和超高清视频的流行&#xff0c;视频文件的体积也相应增大&#xff0c;给存储、传输和分享带来了一系列挑战。为了克服这些问题&#xff0c;视频压缩技术应运而生。本文将深…

论文阅读:Brain–Computer EMO: A Genetic Algorithm Adapting to the Decision Maker

Brain–Computer Evolutionary Multiobjective Optimization: A Genetic Algorithm Adapting to the Decision Maker 作者&#xff1a;Roberto Battiti、Andrea Passerini 期刊&#xff1a;IEEE TRANSACTIONS ON EVOLUTIONARY COMPUTA TION、OCTOBER 2010 DOI&#xff1a;10.11…

window 安装 jenkins 编写脚本

set JAVA_HOMED:\RuanJianKaiFa\jdk\jdk11 set CLASSPATH.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOMe%\lib\tools.jar; set Path%JAVA_HOME%\bin; java -jar jenkins.war 下载jenkins.war包&#xff0c;编写一个txt文档&#xff0c;把脚本复制进去&#xff0c;修改文件后缀为.bat文件…

Nginx简单阐述及安装配置

目录 一.什么是Nginx 二.Nginx优缺点 1.优点 2.缺点 三.正向代理与反向代理 1.正向代理 2.反向代理 四.安装配置 1.添加Nginx官方yum源 2.使用yum安装Nginx 3.配置防火墙 4.启动后效果 一.什么是Nginx Nginx&#xff08;“engine x”&#xff09;是一个高性能的HTTP…

【每日一题】7.LeetCode——合并两个有序链表

&#x1f4da;博客主页&#xff1a;爱敲代码的小杨. ✨专栏&#xff1a;《Java SE语法》|《数据结构与算法》 ❤️感谢大家点赞&#x1f44d;&#x1f3fb;收藏⭐评论✍&#x1f3fb;&#xff0c;您的三连就是我持续更新的动力❤️ &#x1f64f;小杨水平有限&#xff0c;欢…

Java黑马——拼图小游戏

拼图小游戏&#xff08;GUI&#xff09; AWT包会有些兼容问题&#xff0c;不支持某些中文 在本次游戏的GUI开发中&#xff0c;我们将使用Swing包 一、主界面分析 这些东西统一称为组件&#xff0c;JFrame是一个组件、JMenuBar也是一个组件、等等 1、练习一&#xff1a;创建主…

WiFi 7 的核心要点

目录 WiFi 7 是什么&#xff1f; WiFi 7 的主要feature功能&#xff1a; 320Mhz channel 4K QAM Multi-Link Operation (MLO)&#xff0c;多链路操作 512 block ACK OFDMA&#xff1a;multiple RUs to single STA. 总结&#xff1a;性能是第一优先级&#xff0c;WiFi 7&#xf…

leetcode 19 , 118

19 .删除链表倒数第n个节点 思路1&#xff1a; 我首先想到的就是使用两个loop来进行解决&#xff1a; 遍历所有节点&#xff0c;得到需要删除节点的位置。再遍历一边所有节点&#xff0c;找到需要删除节点进行删除。 解决方案1&#xff1a; class Solution {public ListNod…

AI与数字孪生

源自&#xff1a;译文 “人工智能技术与咨询” 发布 AI和数字孪生 预测分析&#xff1a;网络安全水晶球 面对不断变化的威胁&#xff0c;提供自适应安全防护 自然语言处理&#xff1a;解码威胁语言 先进技术&#xff1a;人工智能作为数字孪生安全的基础 道德考量 面向未来…

maven中的version加不加SNAPSHOT的区别

我们平时开发时经常看到maven的pom.xml文件里面的包有两种 因为maven的远程仓库一般分为public(Release)和SNAPSHOT&#xff0c;前者代表正式版本&#xff0c;后者代表快照版本。 具体有什么区别呢&#xff1a; 举例说明&#xff0c;你开发了一个基础功能&#xff0c;打包发布…

服务器C盘突然满了,是什么问题

随着时代的发展、互联网的普及&#xff0c;加上近几年云计算服务的诞生以及大规模普及&#xff0c;对于服务器的使用目前是非常普遍的&#xff0c;用户运维的主要对象一般也主要是服务器方面。在日常使用服务器的过程中&#xff0c;我们也会遇到各式各样的问题。最近就有遇到用…

免费的ChatGPT网站 ( 7个 )

ChatGPT的核心功能是基于用户在输入时的语言或文本生成相应的回复或继续内容。此外&#xff0c;它还能够完成多种任务&#xff0c;如撰写邮件、视频脚本、文案、翻译、代码编写以及撰写论文等。 博主归纳总结了7个国内非常好用&#xff0c;而且免费的chatGPT网站&#xff0c;AI…

026-安全开发-PHP应用模版引用Smarty渲染MVC模型数据联动RCE安全

026-安全开发-PHP应用&模版引用&Smarty渲染&MVC模型&数据联动&RCE安全 #知识点&#xff1a; 1、PHP新闻显示-数据库操作读取显示 2、PHP模版引用-自写模版&Smarty渲染 3、PHP模版安全-RCE代码执行&三方漏洞 演示案例&#xff1a; ➢新闻列表&…

洗眼镜用超声波清洗机是不是智商税?值得入手超声波清洗机推荐

为了不洗眼镜大家都可以懒到什么程度&#xff1f;从一开始佩戴眼镜开始&#xff0c;就非常懒得洗眼镜&#xff0c;就算是眼镜脏了就随便用衣角或者是纸巾擦擦就完事了~基本都是很少用水去清洗。由于我一副眼镜使用的时长不是很久&#xff0c;老板也问我为什么频繁换眼镜&#x…

程序员自由创业周记#26:实习生

程序员自由创业周记#26&#xff1a;实习生 不发工资的实习生 一个人的力量是有限的&#xff0c;尤其是创业。因为要兼顾很多&#xff0c;需要的做的事也很多&#xff0c;而且时间有限&#xff0c;所以有一个帮手至关重要。不过鉴于创业的启动资金有限&#xff0c;雇人在现阶段…