前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >带你学MySQL系列 | 奇怪的null值,我该怎么办?看看我给你的总结!

带你学MySQL系列 | 奇怪的null值,我该怎么办?看看我给你的总结!

作者头像
数据分析与统计学之美
发布2021-11-25 11:00:58
3720
发布2021-11-25 11:00:58
举报
文章被收录于专栏:Python+数据分析+可视化

1.测试数据

代码语言:javascript
复制
create table test_null (
    id int,
    name varchar(20),
    chinese int,
    math int,
    english int
) charset=utf8;

insert into test_null 
values
(1,null,80,70,68),
(2,'张三',60,null,null),
(3,'李四',null,90,80),
(4,'王五',90,60,75),
(5,null,null,50,95);

结果如下:

在这里插入图片描述
在这里插入图片描述

2.null值带给我们的不便影响

1)过滤有所不同,只能使用is null或者is not null;
代码语言:javascript
复制
# null值不能使用 == 或 != 来比较
# 下面两种用法都是错误的
select *
from test_null
where name == null;

select *
from test_null
where name != null;

# null值一般使用 is null 或 is not null 来比较
# 下面两种用法才是正确的
select *
from test_null
where name is null;

select *
from test_null
where name is not null;
2)出现null值,会导致+ - * /运算失效;
代码语言:javascript
复制
select 	
	*,(chinese+math+english) as 总分
from test_null;

结果如下:

在这里插入图片描述
在这里插入图片描述
3)null值对聚合函数无影响,聚合函数会直接忽略null值;
代码语言:javascript
复制
select 
    sum(chinese) 语文总分,
    sum(math) 数学总分,
    sum(english) 外语总分
from test_null

结果如下:

在这里插入图片描述
在这里插入图片描述

3.空格、空值和null,我们应该怎么判断呢?

1)空格、空值和null的区别

用一个形象的比喻来说明这三者的区别。首先空格很好理解,一个空字符串吗,占据一定的空间大小。不好理解的其实是空值和null,空值相当于一个杯子是真空状态的,什么也没有,null表示的杯子中有空气。

  • MySQL中,null是未知的,且占用空间的。null使得索引、索引统计和值都更加复杂,并且影响优化器的判断。
  • 空值('')是不占用空间的,注意空值的’'之间是没有空格的。
  • 在进行count()统计某一列记录数的时候,如果存在null值,会被系统自动忽略掉,但是空值会被统计到其中。
  • 判断null使用的是is nullis not null,但判断空字符使用的是= ,!=, <>来进行处理。
  • 对于timestamp数据类型,如果插入null值,则出现的值是当前系统时间。插入空值,则会出现0000-00-00 00:00:00
  • 对于已经创建好的表,普通的列将null修改为not null带来的性能提升较小,所以调优时候没有比要注意。
2)出现了null值,我应该怎么办?

通过上面的分析我们已经知道了,当表中存在null值,会导致加、减、乘、除运算失效。那么我们怎么处理这些null值比较好呢?

  • 第一种方式:直接使用is not null将这些null值过滤掉,但是这样会将其它非缺失值的字段过滤掉,造成数据的浪费。
  • 第二种方式:也是我们推荐的方式,我们使用函数进行缺失值的填充。

ifnull()和coalesce()函数的使用:

代码语言:javascript
复制
select 
    	id,
    	coalesce(name,'无名氏') name,
    	coalesce(chinese,0) chinese,
    	ifnull(math,0) math,
    	ifnull(english,0) english
from test_null;

结果如下:

在这里插入图片描述
在这里插入图片描述
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/06/19 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.测试数据
  • 2.null值带给我们的不便影响
    • 1)过滤有所不同,只能使用is null或者is not null;
      • 2)出现null值,会导致+ - * /运算失效;
        • 3)null值对聚合函数无影响,聚合函数会直接忽略null值;
        • 3.空格、空值和null,我们应该怎么判断呢?
          • 1)空格、空值和null的区别
            • 2)出现了null值,我应该怎么办?
            相关产品与服务
            云数据库 MySQL
            腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档