这跟我们的预期结果不大一致,预期是想返回id2~10的数据
当然,这个问题也不是无解,MySQL同样也提供了方法
要解决这个问题,只能再加一个条件就是把字段值为null的再单独处理一下
文章插图
isnull
四、空指针问题如果一个列存在null值,使用MySQL的聚合函数后返回结果是null,而并非是0,就会造成程序执行时的指针异常
CREATE TABLE user_order ( id INT PRIMARY KEY auto_increment, num int) ENGINE='innodb';
insert into user_order(num) values(3),(6),(6),(NULL);
创建用户订单数量表,并插入4条数据,接下来演示一下产生的问题select sum(num) from goods where id>4;
文章插图
聚合函数产生的问题
可以看到当字段为null时,使用聚合函数返回值就是null,并非是0,那么这个问题要怎么处理呢?
同样MySQL也给大家提供了对应函数,就是ifnull
select ifnull(sum(num), 0) from goods where id>4;
文章插图
在这里插入图片描述
五、这是在难为谁?当一个字段的值存在null值,若要进行null值查询时,必须要使用isnull或者ifnull进行匹配查询,又或者使用is null,is not null 。
而常用的表达式就不能再进行使用了,有工作经验的还好的,要是新人的话会很难受 。
接下来看几个新人经常犯的错误
错误一
对存在null值的字段使用表达式进行过滤,正确用法应该是is null 或者 is not null
select * from user where name<>null;
文章插图
在这里插入图片描述
错误二
依然是使用表达式,同样可以使用isnull
文章插图
在这里插入图片描述
六、总结说了这么多也都感觉到了字段设置为null的麻烦之处,不过幸好的是MySQL对使用is null、isnull()等依然可以使用上索引 。
咔咔目前所在的公司存在大量字段默认值就是null,于是代码中就大量存储ifnull、is null、is not null等代码 。
一般字段数值类型的默认值就给成0,字符串的给个空也行,千万不要给null了哈!
文章来自
https://www.cnblogs.com/fkaka/p/16227471.html
推荐阅读
- 喝黑茶为什么能暖胃,女人喝红茶能减肥吗
- 计算机与操作系统中无处不在的同步与异步
- C语言入门算法丨冒泡排序算法详解!绝不摆烂
- 科学泡红茶,姜红茶不用煮用泡
- WIFI、WLAN傻傻分不清?知道二者的区别其实很重要
- 电脑中存在多个版本的Python如何不冲突?
- 分布式锁的实现方式
- 红茶可以清火吗,红茶第泡能不能喝
- 红茶香气不够的原因,刚做出来的红茶试泡无味
- 翡翠手镯|你不认识的藏区老文玩,它可是有名的法器,别当成降魔铃