原创

null值对查询结果造成偏差的三种情况


作者 | 浩说编程
来源 | 公众号:浩说编程
[  用"内容"服务读者 | 让"代码"服务大众  ]

  


"null"

不知道兄弟们是否有同感

在写查询语句的时候我们通常不会刻意去考虑表中的”null“值

但有些时候对比查询结果和数据库又发现跟预想的不一样!

如果迟迟找不到原因那很有可能是"null"值搞的鬼

下面就让我们来一探究竟

注:以下情况针对于MYSQL数据库


01 | null导致sum函数返回null而不是0

   如果sum函数指定的字段在数据库中全部为null,那么sum函数将返回null,而非0


    错误案例

    我们先给定一个表数据

    表名 | test

    字段

    name varchar

    mark int


    向表中插入一条数据

    只给name赋值

    mark为null

sql查询结果和预想的不一样?多半是"null"在作怪

    此时我们对mark求和

SELECT SUM(mark) FROM test


    查询结果:

sql查询结果和预想的不一样?多半是"null"在作怪

    返回了null,这显然不符合我们的期望,

    按照正常的逻辑,我们通常希望能返回0,此时我们可以使用 ifnull 函数来解决这个问题


    修改之后的SQL:

SELECT IFNULL(SUM(mark),0) FROM test


    返回了期望的查询结果:

sql查询结果和预想的不一样?多半是"null"在作怪


 福利 " 上菜 " 

不知不觉又到了经典"上菜"环节

兄弟们准备好了嘛!

今日菜系:

800道大厂面试题

1000道基础面试题

扫码 发送数字 "7"

找面试题再也不用东拼西凑,爽到飞起!

  


02 | null导致count函数遗漏统计数目

    如果我们以某个可以为null的字段来统计count,那么就有可能遗漏统计数目


    错误案例:

    以上面的表数据为例

sql查询结果和预想的不一样?多半是"null"在作怪

    我们以mark字段来查询count值

SELECT COUNT(mark) FROM test


    查询结果:

sql查询结果和预想的不一样?多半是"null"在作怪

    我们的表中是存在一条数据的,所以正常的返回结果应该是1,

    但由于mark为null,所以就被遗漏了,返回了0。

    修改方案也很简单,统计数目就用COUNT(*)即可!


    修改之后的SQL:

SELECT COUNT(*) FROM test


    返回了期望的查询结果:

sql查询结果和预想的不一样?多半是"null"在作怪


03 | 判断null要用"is null",而非"= null"

    如果我们的查询条件中涉及null判断,使用"="是无效的


    错误案例:

    依然以上面的表数据为例

sql查询结果和预想的不一样?多半是"null"在作怪

    我们查询mark为null的数据

SELECT * FROM  test WHERE mark = null


    查询结果:

sql查询结果和预想的不一样?多半是"null"在作怪

    可以看到没有查询到数据,这是显然不正确的,所以我们应该用”is null“这种写法


    修改之后的SQL:

SELECT * FROM  test WHERE mark is null


    返回了期望的查询结果:

sql查询结果和预想的不一样?多半是"null"在作怪



正文到此结束
本文目录