带你学MySQL系列 | 奇怪的null值,我该怎么办?看看我给你的总结!
2023-03-20 14:41:41 时间
1.测试数据
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;
# 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值,会导致+ - * /运算失效;
select
*,(chinese+math+english) as 总分
from test_null;
结果如下:
3)null值对聚合函数无影响,聚合函数会直接忽略null值;
select
sum(chinese) 语文总分,
sum(math) 数学总分,
sum(english) 外语总分
from test_null
结果如下:
3.空格、空值和null,我们应该怎么判断呢?
1)空格、空值和null的区别
用一个形象的比喻
来说明这三者的区别。首先空格很好理解,一个空字符串吗,占据一定的空间大小。不好理解的其实是空值和null,空值相当于一个杯子是真空状态的,什么也没有,null表示的杯子中有空气。
- MySQL中,
null
是未知的,且占用空间的。null使得索引、索引统计和值都更加复杂,并且影响优化器的判断。 空值('')
是不占用空间的,注意空值的’'之间是没有空格的。- 在进行
count()统计
某一列记录数的时候,如果存在null
值,会被系统自动忽略掉,但是空值会被统计到其中。 - 判断null使用的是
is null
和is not null
,但判断空字符使用的是= ,!=, <>
来进行处理。 - 对于
timestamp
数据类型,如果插入null值
,则出现的值是当前系统时间
。插入空值,则会出现0000-00-00 00:00:00
。 - 对于已经创建好的表,普通的列将
null
修改为not null
带来的性能提升较小,所以调优时候没有比要注意。
2)出现了null值,我应该怎么办?
通过上面的分析我们已经知道了,当表中存在null值,会导致加、减、乘、除运算失效。那么我们怎么处理这些null值比较好呢?
第一种方式:
直接使用is not null将这些null值过滤掉,但是这样会将其它非缺失值的字段过滤掉,造成数据的浪费。第二种方式:
也是我们推荐的方式,我们使用函数进行缺失值的填充。
ifnull()和coalesce()函数的使用:
select
id,
coalesce(name,'无名氏') name,
coalesce(chinese,0) chinese,
ifnull(math,0) math,
ifnull(english,0) english
from test_null;
结果如下:
相关文章
- 大数据时代谁给隐私“上锁”
- 如何从零开始教女同学进行PHP开发(2):表单的处理
- 企业发展滞缓,还不是因为踩了这四个数据大坑
- 优化C++代码(4):消除冗余代码
- 有没有想过 你的数据分析方法可能已经过时?
- 数据即权力,无现金社会就是大数据的圈地运动!
- 如果有人问你什么是大数据?不妨说说这10个典型的大数据案例
- 三步走——带你打造一份完美的数据科学求职简历
- Oracle解密“零丢失”的数据保护
- 向云上迁移数据时如何避免停机和中断
- 大数据告诉你:90后的钱都花哪儿了?
- 使用Sklearn进行数据挖掘
- 如何利用C++搭建个人专属的TensorFlow
- 平安人寿谢佳标:利用Microsoft R Server对大数据进行机器学习
- 破解大数据孤岛化 SaaS主流厂商共建开放标准
- 基于MongoDB打造.Net的分布式Session子系统
- 大数据时代:十大最热门的大数据技术
- 在弹性应用程序设计上,eBay为什么选择MongoDB?
- 浅析Mybatis与Hibernate的区别与用途
- 2017年中国程序员调查分析:大数据就业前景广阔