MySQL使用BETWEEN运算符比较NULL

MySQL使用BETWEEN运算符比较NULL

在本文中,我们将介绍MySQL中使用BETWEEN运算符比较NULL的情况。在日常数据库操作中,我们经常会使用BETWEEN运算符来查询两个值之间的数据,但是当其中一个值为NULL时,会出现一些特殊的情况。

阅读更多:MySQL 教程

BETWEEN运算符

BETWEEN运算符用于查询两个范围之间的数据,语法如下:

SELECT column_name(s)
FROM table_name
WHERE column_name BETWEEN value1 AND value2;
Mysql

其中,column_name为要查询的列名,table_name为要查询的表名,value1和value2为范围内的值。

使用BETWEEN运算符比较NULL

当使用BETWEEN运算符比较NULL时,会出现不同的结果,具体如下:

  1. 如果value1和value2都为NULL,那么结果将为空,因为NULL不能与任何值比较。

  2. 如果一个值为NULL,另一个值为非NULL值,那么结果将不包含NULL的行,具体如下:

SELECT column_name(s)
FROM table_name
WHERE column_name BETWEEN NULL AND 100;
Mysql

此时,如果查询的表中有一行数据,column_name列的值为75,则不会被查询结果包含,因为BETWEEN运算符不包括指定的边界值,即NULL。

  1. 如果查询范围内包括NULL值,那么该行数据将会被包含在查询结果中,具体如下:
SELECT column_name(s)
FROM table_name
WHERE column_name BETWEEN 75 AND NULL;
Mysql

此时,如果查询的表中有一行数据,column_name列的值为NULL,则会被查询结果包含。

示例

为了更好地理解BETWEEN运算符的特殊情况,下面我们举几个例子。

假设有一个用户表,其中包含用户ID和用户创建时间两列,如下所示:

用户ID 创建时间
1 2021-01-01 08:00:00
2 2021-01-02 08:00:00
3 NULL
4 2021-01-04 08:00:00

我们想要查询创建时间在2021年1月2日至2021年1月3日之间的用户,应该怎么写SQL语句呢?

一般情况下,应该这样写:

SELECT user_id
FROM user
WHERE create_time BETWEEN '2021-01-02 00:00:00' AND '2021-01-03 23:59:59';
Mysql

但是,如果我们不知道create_time中是否包含NULL值,那么上述语句可能会漏掉某些用户。

举个例子,如果我们把查询范围修改为2021年1月1日至2021年1月3日之间的用户,那么应该怎么写SQL语句呢?

如果不使用BETWEEN运算符,直接使用两个大于等于、小于等于的比较符,可以这样写:

SELECT user_id
FROM user
WHERE create_time >= '2021-01-01 00:00:00' AND create_time <= '2021-01-03 23:59:59';
Mysql

但是,如果使用BETWEEN运算符时,由于create_time列中包含NULL值,应该这样写:

SELECT user_id
FROM user
WHERE create_time BETWEEN '2021-01-01 00:00:00' AND '2021-01-03 23:59:59' OR create_time IS NULL;
Mysql

这样,即可查询出所有创建时间在2021年1月1日至2021年1月3日之间的用户,包括创建时间为NULL的用户。

总结

使用BETWEEN运算符比较NULL时,需要注意查询范围内是否包含NULL值,以及如何处理包含NULL值的情况。在实际使用中,可以使用OR语句将NULL值和查询范围内的数据一起查询出来,也可以根据具体情况使用其他方法来处理。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册