加入收藏 | 设为首页 | 会员中心 | 我要投稿 我爱制作网_池州站长网 (https://www.0566zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

Mysql查询中null值的坑

发布时间:2023-01-07 12:48:02 所属栏目:MySql教程 来源:
导读:  Mysql数据库中,有时候会遇到字段为null的情况,导致查询的结果可能与预期的不一致。

  今天看看可能会受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‘的记录没有被查询出来。
 

(编辑:我爱制作网_池州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!