首页 > 数据库 >(六)MySQL中查询null值的一般做法

(六)MySQL中查询null值的一般做法

时间:2022-10-05 17:31:45浏览次数:47  
标签:NULL 06 name 28 查询 2020 MySQL null

我们之前说过,null值在MySQL中是一种很特殊的情况,处理不好会影响查询数据库的速度。那么如果我们想查询表中值为 null的数据,应该怎么处理呢? 当提供的查询条件字段为NULL时,MySQL语句可能就无法正常工作。

  处理这种情况,可以用三大运算符来查询:

  1. is null  当列的值是null ,会返回 true
  2. is not null 当列的值不为null,也会返回true
  3. <=> : 比较操作符 (不同于 = 运算符) ,当比较的两个值相等或者都为null时,返回 true


null的条件比较运算是比较特殊的,不能使用 = null 或者 != null在列中查找null值。MySQL中,null值与任何其它值的比较(即使是null),永远返回null

处理null需要使用IS NULL 和 IS NOT NULL


我们来具体看下实例:

之前一直用的teacher和course表中都没有null值,我们需要给表中插入一些

null值。插入的时候需要先看下表中字段创建时是否定义了不能为空。如果定义了not null,则不能插入null值。

mysql> insert into course (name) values (null),(null);

ERROR 1048 (23000): Column 'name' cannot be null

可以看到,course表中的name字段不能为空,所以不能插入null值

查下course表和teacher表中对各字段的定义:

mysql> show columns from course;

+-------+------------------+------+-----+---------+----------------+

| Field | Type  | Null | Key | Default | Extra |

+-------+------------------+------+-----+---------+----------------+

| id | int(10) unsigned | NO  | PRI | NULL | auto_increment |

| name | varchar(100)  | NO  |  | NULL | |

+-------+------------------+------+-----+---------+----------------+

2 rows in set (0.01 sec)

可以看出,course表中id和name都不能为空


mysql> show columns from teacher;

+--------+--------------+------+-----+---------+-------+

| Field | Type  | Null | Key | Default | Extra |

+--------+--------------+------+-----+---------+-------+

| id  | int(11) | NO  | PRI | NULL |  |

| name  | varchar(100) | YES |  | NULL |  |

| time  | date  | YES |  | NULL |  |

| scores | int(11) | YES |  | NULL |  |

+--------+--------------+------+-----+---------+-------+

4 rows in set (0.00 sec)

可以看出,teacher表中除了id不能为空,其它字段都可以为空


mysql> insert into teacher (id,name,time,scores) values (11,null,null,92);

Query OK, 1 row affected (0.01 sec)

插入包含null值的数据

我们查一下:

mysql> select * from teacher;

+----+--------+------------+--------+

| id | name  | time  | scores |

+----+--------+------------+--------+

| 1 | 张三  | 2020-06-28 |  77 |

| 2 | 李四  | 2020-06-28 |  88 |

| 3 | 王五  | 2020-06-28 |  66 |

| 4 | 赵六  | 2020-06-28 |  49 |

| 5 | 张三  | 2020-06-29 |  81 |

| 6 | 胡八  | 2020-06-29 |  92 |

| 7 | 柳九  | 2020-06-29 | 100 |

| 8 | 王五  | 2020-06-29 |  28 |

| 11 | NULL  | NULL  |  92 |

+----+--------+------------+--------+

9 rows in set (0.00 sec)


我们先使用 = 和 != 来查询表中是否有null值

mysql> select * from teacher where name = null;

Empty set (0.02 sec)


mysql> select * from teacher where time != null;

Empty set (0.00 sec)

可以看粗,即使表中有null值,= 和 != 查不到


mysql> select * from teacher where name is null;

+----+------+------+--------+

| id | name | time | scores |

+----+------+------+--------+

| 11 | NULL | NULL |  92 |

+----+------+------+--------+

1 row in set (0.01 sec)

用了is null,可以查出来了


mysql> select * from teacher where name is not null;

+----+--------+------------+--------+

| id | name  | time  | scores |

+----+--------+------------+--------+

| 1 | 张三  | 2020-06-28 |  77 |

| 2 | 李四  | 2020-06-28 |  88 |

| 3 | 王五  | 2020-06-28 |  66 |

| 4 | 赵六  | 2020-06-28 |  49 |

| 5 | 张三  | 2020-06-29 |  81 |

| 6 | 胡八  | 2020-06-29 |  92 |

| 7 | 柳九  | 2020-06-29 | 100 |

| 8 | 王五  | 2020-06-29 |  28 |

+----+--------+------------+--------+

8 rows in set (0.01 sec)

再试下 is not null ,哪些数据不为空,返回数据结果也是正确的


mysql> select * from teacher where time is null;

+----+------+------+--------+

| id | name | time | scores |

+----+------+------+--------+

| 11 | NULL | NULL |  92 |

+----+------+------+--------+

1 row in set (0.00 sec)


mysql> select * from teacher where time is not null;

+----+--------+------------+--------+

| id | name  | time  | scores |

+----+--------+------------+--------+

| 1 | 张三  | 2020-06-28 |  77 |

| 2 | 李四  | 2020-06-28 |  88 |

| 3 | 王五  | 2020-06-28 |  66 |

| 4 | 赵六  | 2020-06-28 |  49 |

| 5 | 张三  | 2020-06-29 |  81 |

| 6 | 胡八  | 2020-06-29 |  92 |

| 7 | 柳九  | 2020-06-29 | 100 |

| 8 | 王五  | 2020-06-29 |  28 |

+----+--------+------------+--------+

8 rows in set (0.00 sec)

我们再用下time字段,结果也是一样的。


好了,今天就先到这里吧。   

(六)MySQL中查询null值的一般做法_字段

标签:NULL,06,name,28,查询,2020,MySQL,null
From: https://blog.51cto.com/u_11894/5732785

相关文章

  • MySQL8.0.30安装教程
    第一步:输入MySQL网站       www.mysql.com  选择DOWNLOADS并点击进入:  选择最下面的“MySQL Community(GPL)Downloads>>”选项,进入下一页......
  • MYSQL学习之数据库设计三范式
    (一)什么是设计库设计范式?  数据库表的设计依据,从而进行数据表的设计。(二)范式内容I.第一范式:要求任何一张表必须有主键,每一个字段原子性不可再分。II.第二范式:建立在第一范......
  • MYSQL的引擎和锁
    MYSQL的引擎和锁这里介绍常用MySQL引擎,分别是MyISAM、InnoDB、Memory和CSV。MySAM是MySQL5.5.8版本之前的默认引擎,在MySQL5.5.8+后的默认存储引擎InnoDB。采用表空......
  • mysql 的小问题
    首先按下win+R执行services.msc进入服务,查找到MySQL,点击停止服务,然后在控制台cmd进入本地的MySQL文件夹,我的文件名是mysql-8.0.26-winx64,进入后执行命令scdeletemysql......
  • MySQL面试题(一)
    1、MySQL中有哪几种锁?1、表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。2、行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并......
  • MYSQL学习之视图
    (一)什么是视图??  视图就是站在不同的角度取看待同一份数据。(二)基本操作表复制:mysql>createtabledept2asselect*fromdept;#复制mysql>createtablescholar1assel......
  • 通过JDBC进行简单的增删改查(以MySQL为例)
    目录前言:什么是JDBC一、准备工作(一):MySQL安装配置和基础学习二、准备工作(二):下载数据库对应的jar包并导入三、JDBC基本操作(1)定义记录的类(可选)(2)连接的获取(3)insert(4)upda......
  • MySQL的字段默认null对唯一索引的影响详解
    这篇文章主要为大家介绍了MySQL的字段默认null对唯一索引的影响详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪在日常业务开发中,会经常遇到需......
  • Springboot2.6整合Swagger3时报错this.condition is null的解决方案
    错误Springboot2.6整合Swagger3时报错:this.conditionisnull:解决方案这个问题主要出现在SpringBoot2.6及以后,只要是SpringBoot2.6引入的新PathPatternParser导致的......
  • 条件查询
    什么是条件查询不是将表中所有数据都查出来。是查询出来符合条件的语法格式:select字段1,字段2,字段3...from表名where条件;都有哪些条件:=等于查询薪资等于800的员......