Mysql查询中null值的坑
发布时间:2023-01-07 12:48:02 所属栏目:MySql教程 来源:
导读: Mysql数据库中,有时候会遇到字段为null的情况,导致查询的结果可能与预期的不一致。
今天看看可能会受null值影响的语句有哪些。
一、count(列名)
当某字段存在 null值 时,count(列名
今天看看可能会受null值影响的语句有哪些。
一、count(列名)
当某字段存在 null值 时,count(列名
|
Mysql数据库中,有时候会遇到字段为null的情况,导致查询的结果可能与预期的不一致。 今天看看可能会受null值影响的语句有哪些。 一、count(列名) 当某字段存在 null值 时,count(列名) 是不会把 null 值计算出来; count(*) , count(1) ,null值会被计算入内。 数据表如下: SELECT count(*) FROM `test2`; SELECT count(1) FROM `test2`; SELECT count(runoob_id) FROM `test2`; 二、null值不=null 判断字段是否为null,要使用is null,不能使用=null SELECT * FROM `test2` where runoob_id = NULL; SELECT * FROM `test2` where runoob_id IS NULL; 三、NULL值排序 如果使用ORDER BY子句以升序对结果集排序,MySQL认为NULL值低于其他值,因此,它首先显示NULL值。 SELECT * FROM `test2` order by runoob_id; 四、group by null 即使NULL不等于NULLmysql查询,但是在GROUP BY子句中的两个NULL值也是相等的。 修改表的数据如下: SELECT * FROM `test2` group by runoob_id; 可以看到runoob_title为'test5'的记录没有被查询出来,因为即使NULL不等于NULL,但是在GROUP BY子句中的两个NULL值也是相等的。 五、not in 与null 1.not in 子查询中包含null值时,查询结果为空。 新建数据表test3 test2中不存在runoob_id为4 的记录。 SELECT * FROM `test3` where runoob_id not in (select runoob_id from test2 ) SELECT?*?FROM?`test3`?where?runoob_id??not?in?(select?runoob_id?from?test2?where?runoob_id?is?not?null) not in的实现原理是,对每一个table1.name和每一个table2.name(括号内的查询结果)进行不相等比较(!=)。 sql中任意!=null的运算结果都是false,所以如果table2中存在一个null,not in的查询永远都会返回false,即查询结果为空 2.not in 语句不会对null值进行匹配,即查询不到null值记录 六、in与null in语句中不会对null值进行匹配,即查询不到null值记录 七、count(distinct 列名1,列名2,列名n) 当使用 count(distinct col1, col2)查询时,如果其中一列为 NULL,那么即使另一列有不同的值,那么查询的结果也会将数据丢失。 test2表新增一行数据 SELECT distinct runoob_id,runoob_title FROM `test2`; 可以看到,每条数据都是能查询到的。 SELECT count(distinct runoob_id,runoob_title) FROM `test2` 可以看到,runoob_title为’test3‘的记录没有被查询出来。 (编辑:我爱制作网_池州站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
站长推荐


浙公网安备 33038102330577号