sql查询结果和预想的不一样?多半是"null"在作怪
2023-04-18 16:12:31 时间
不知道兄弟们是否有同感
在写查询语句的时候我们通常不会刻意去考虑表中的”null“值
但有些时候对比查询结果和数据库又发现跟预想的不一样!
如果迟迟找不到原因那很有可能是"null"值搞的鬼
下面就让我们来一探究竟
注:以下情况针对于MYSQL数据库
01null导致sum函数返回null而不是0
如果sum函数指定的字段在数据库中全部为null,那么sum函数将返回null,而非0
错误案例:
我们先给定一个表数据
表名 | test
字段
name varchar
mark int
向表中插入一条数据
只给name赋值
mark为null
此时我们对mark求和
SELECT SUM(mark) FROM test
查询结果:
返回了null,这显然不符合我们的期望,
按照正常的逻辑,我们通常希望能返回0,此时我们可以使用 ifnull 函数来解决这个问题
修改之后的SQL:
SELECT IFNULL(SUM(mark),0) FROM test
返回了期望的查询结果:
如果我们以某个可以为null的字段来统计count,那么就有可能遗漏统计数目
错误案例:
以上面的表数据为例
我们以mark字段来查询count值
SELECT COUNT(mark) FROM test
查询结果:
我们的表中是存在一条数据的,所以正常的返回结果应该是1,
但由于mark为null,所以就被遗漏了,返回了0。
修改方案也很简单,统计数目就用COUNT(*)即可!
修改之后的SQL:
SELECT COUNT(*) FROM test
返回了期望的查询结果:
03判断null要用"is null",而非"= null"
如果我们的查询条件中涉及null判断,使用"="是无效的
错误案例:
依然以上面的表数据为例
我们查询mark为null的数据
SELECT * FROM test WHERE mark = null
查询结果:
可以看到没有查询到数据,这是显然不正确的,所以我们应该用”is null“这种写法
修改之后的SQL:
SELECT * FROM test WHERE mark is null
返回了期望的查询结果:
- THE END -
相关文章
- 直接在代码里面对list集合进行分页
- .NET Framework 4.5新特性详解
- 大数据的简要介绍
- 大数据的由来
- 高斯混合模型的自然梯度变量推理
- timing-wheel 仿Kafka实现的时间轮算法
- 使用Navicat软件连接自建数据库(Linux系统)
- 那一天,我被Redis主从架构支配的恐惧
- Redis 深入了解键的过期时间
- C#使用委托调用实现用户端等待闪屏
- 基于流计算 Oceanus 和 Elasticsearch Service 构建百亿级实时监控系统
- GRAND | 转录调控网络预测数据库
- JFreeChart API中文文档
- 临床相关突变查询数据库
- TIGER | 人类胰岛基因变化查询数据库
- 视频边缘计算网关EasyNVR在视频整体监控解决方案中的应用分析
- Apache Arrow - 大数据在数据湖后的下一个风向标
- 常见的电商数据指标体系
- AKShare-艺人数据-艺人流量价值
- MySQL中多表联合查询与子查询的这些区别,你可能不知道!