MySQL中的between语句是用于范围查询的常用语法,很多开发者在使用时会疑惑它是否包含等于号,也就是是否会匹配边界值。实际上between语句的匹配逻辑是包含左右两个边界值的,相当于同时使用大于等于和小于等于的条件组合。

between语句的基本语法
between语句的基本使用格式如下,用于在指定范围内匹配数据:
-- 查询id在1到5之间的所有记录 SELECT * FROM test_table WHERE id BETWEEN 1 AND 5;
上面的语句等价于下面的写法,两种查询的结果完全一致:
-- 等价写法,使用大于等于和小于等于组合 SELECT * FROM test_table WHERE id >= 1 AND id <= 5;
实际案例验证
我们创建一张测试表并插入数据来验证between的匹配规则:
-- 创建测试表
CREATE TABLE score (
id INT PRIMARY KEY AUTO_INCREMENT,
student_name VARCHAR(20),
math_score INT
);
-- 插入测试数据
INSERT INTO score (student_name, math_score) VALUES
('张三', 60),
('李四', 70),
('王五', 80),
('赵六', 90),
('钱七', 100);
执行between查询语句,查询数学成绩在70到90分之间的学生:
SELECT student_name, math_score FROM score WHERE math_score BETWEEN 70 AND 90;
查询结果为:
| student_name | math_score |
|---|---|
| 李四 | 70 |
| 王五 | 80 |
| 赵六 | 90 |
可以看到边界值70和90都被匹配到了,说明between语句是包含等于边界值的情况的。
注意事项
- between后面的两个边界值,第一个值必须小于等于第二个值,否则查询不会返回任何结果。比如
WHERE id BETWEEN 5 AND 1是无效的,不会匹配到任何数据。 - between不仅可以用在数值类型的字段查询中,也可以用在日期、字符串等类型的字段上,匹配逻辑同样是包含边界值。比如查询日期在2023-01-01到2023-01-31之间的记录,两个边界日期都会被包含。
- 如果不需要包含边界值,不要使用between语句,而是使用大于和小于的组合条件,比如
WHERE id > 1 AND id < 5。
和其他范围查询的对比
我们可以通过表格对比between和不同范围查询写法的差异:
| 查询写法 | 匹配范围 | 是否包含左边界 | 是否包含右边界 |
|---|---|---|---|
| BETWEEN a AND b | [a, b] | 是 | 是 |
| >= a AND <= b | [a, b] | 是 | 是 |
| > a AND < b | (a, b) | 否 | 否 |
| >= a AND < b | [a, b) | 是 | 否 |
| > a AND <= b | (a, b] | 否 | 是 |
从上面的对比可以看出,between语句和>= a AND <= b的匹配逻辑完全一致,都是包含左右两个边界值的,所以可以确定MySQL的between语句是包含等于号的效果的。