数据库是mysql5.7
发现问题
数据库中某个字段之前为null,后面需要修改添加为查询条件使用=进行查询时无数据
假设表如图:
查询
SELECT * from tb_kjkm t WHERE t.unitType = null;
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视为相等的分为一组