mysql中的=null和is null

310 阅读2分钟

“我报名参加金石计划1期挑战——瓜分10万奖池,这是我的第一篇文章,点击查看活动详情

前言:一直以为=null 是可以查询出所查字段为null的字段,但实际上,=null查出来的数据为空,查询null的记录需要使用is null,查询数据证明如下:

表数据:

image.png

sql查询:

=null查询

image.png

is null

image.png

原因

sql逻辑表达式可能存在三种值:true,false,unkonwn

第三种值unkonwn 被译为:不知道的值或者不存在的值,一般情况下,在where和having中,unknown等同于false,故=null时表达式为false,未被查询出来

注意情况

在修饰符使用时,往往会会将=null转换为false,有几种情况除外

1、使用 时ORDER BY, NULL首先显示值,如果您指定DESC按降序排序,则最后显示值。

2、使用DISTINCTGROUP BYORDER BY时,所有 NULL值都被视为相等。

聚合函数下,一般情况下会忽略null值,如 COUNT()、 MIN()和 SUM()忽略 NULL值。例外是 COUNT(*),它计算行而不是单个列值。

使用null值

在 MySQL 中,0orNULL 表示 false,其他任何表示 true。布尔运算的默认真值是1

参考链接:dev.mysql.com/doc/refman/…

在count函数使用中会忽略null值

box中,根据count(box.Id)查询结果可以得知总数据有17条,但Modifier中存在null值,故查询出来的总数为4条,忽略了null

image.png

在int类型中无法插入null值

image.png 虽然null值为不知道的值或不存在的值 ,但是具有意义,且占据物理空间

但是当sortno先定义的类型为varchar,再改为int,会存在null值,具体原因未明,望知情人告知

min()、max()中会忽略null值

目前无法验证,但是mysql官方原文为聚合函数下,一般情况下会忽略null值,如 COUNT()、 MIN()和 SUM()忽略 NULL值。例外是 COUNT(*),它计算行而不是单个列值。

注:第一次在掘金写文,如有错误之处还请各位大佬指点