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

不知道兄弟们是否有同感

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

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

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

下面就让我们来一探究竟

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

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

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

错误案例

我们先给定一个表数据

表名 | test

字段

name varchar

mark int

向表中插入一条数据

只给name赋值

mark为null

此时我们对mark求和

SELECT SUM(mark) FROM test

查询结果:

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

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

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

修改之后的SQL:

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

返回了期望的查询结果:

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

兄弟们学习的同时别忘了点赞分享哦!我会感动到哭

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

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

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

错误案例:

以上面的表数据为例

我们以mark字段来查询count值

SELECT COUNT(mark) FROM test

查询结果:

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

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

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

修改之后的SQL:

SELECT COUNT(*) FROM test

返回了期望的查询结果:

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

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

错误案例:

依然以上面的表数据为例

我们查询mark为null的数据

SELECT * FROM  test WHERE mark = null

查询结果:

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

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

修改之后的SQL:

SELECT * FROM  test WHERE mark is null

返回了期望的查询结果:

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

今天我们探讨了null值对查询结果造成偏差的三种情况

有用的话兄弟们记得点赞收藏支持一下哦!

更多编程资料、电子书、安装包在我同名公众号“浩说编程”中已经为兄弟们准备好啦,欢迎来撩!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值