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_nullwhere name == null;select *from test_nullwhere name != null;# null值一般使用 is null 或 is not null 来比较# 下面两种用法才是正确的select *from test_nullwhere name is null;select *from test_nullwhere name is not 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 nullis 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) englishfrom test_null;

在这里插入图片描述

更多相关文章

  1. Pycharm安装PyQt5的详细教程
  2. 【阿里云镜像】使用阿里巴巴DNS镜像源——DNS配置教程
  3. android用户界面之按钮(Button)教程实例汇
  4. 【Android(安卓)开发教程】Toast通知
  5. Android简易实战教程--第三十九话《Chronometer实现倒计时》
  6. android加密解密完美教程
  7. Android(安卓)SDK自带教程之BluetoothChat
  8. OpenGL ES教程VI之纹理贴图(原文对照)
  9. 给两到五年经验的Android面试者

随机推荐

  1. onRetainNonConfigurationInstance和getL
  2. Android内核的编译与裁剪
  3. Google 推出「Android(安卓)Beam」基於 N
  4. Android内建样式收集
  5. android一键分享功能不使用任何第三方sdk
  6. android实践--进度对话框(ProgressDialog
  7. android 解析服务端下发的颜色值
  8. Android Notification的使用
  9. Android File Hierarchy : System Struct
  10. [日更-2019.5.21] Android(安卓)系统的分