参考:

https://juejin.cn/post/6966107673125191711

发现问题

数据库中某个字段之前为null,后面需要修改添加为查询条件使用=进行查询时无数据

假设表如图:

查询

sql
​
 代码解读
复制代码SELECT * from tb_kjkm t WHERE t.unitType = null; 

sql
​
 代码解读
复制代码SELECT * from tb_kjkm t WHERE t.unitType is null;

查询条件为 =null 时无法查询数据,使用is null 可以正常查询数据

探究sql中= null和is null

一般语言逻辑表达式只有true和false。 在SQL中逻辑表达式的可能值包括TRUE、FALSE和UNKNOWN。它们称为三值逻辑,三值逻辑是SQL所特有的。NULL值通常表示丢失或不相关的值。当比较丢失值和另一个值(这个值也可能是NULL)时,逻辑结果总是UNKNOWN。 NOT TRUE等于FALSE,NOT FALSE等于TRUE,而否定的UNKNOWN(NOT UNKNOWN)还是UNKNOWN。 UNKNOWN逻辑结果和NULL在不同的语言元素中被区别对待。 查询表达式中(比如where,having,on中),UnKnown会视为false。 在check约束中,UnKnown就会视为true来处理。设置某个字段的值必须大于等于0的情况下,我们还可以往该字段中插入Null值

需要注意的是,在分组子句与排序子句中,sql视null是相等的 即: 1,GROUP BY会把所有NULL值分到一组。 2,ORDER BY会把所有NULL值排列在一起。

小结

1.条件查询时不能使用 =null 或!=null 进行比较,必须使用is null/not null 2.分组排序时,null视为相等的分为一组

2.分组排序时,null视为相等的分为一组