SQL BETWEEN 范围查询
学习 BETWEEN 和 NOT BETWEEN · 难度:入门 · +10XP
SQL BETWEEN 范围查询
在日常数据查询中,经常需要筛选落在某个数值区间或日期范围内的记录。例如查询分数在 70 到 90 之间的学生,或者查询 2024 年 1 月到 6 月的订单。SQL 提供了 BETWEEN 操作符来优雅地表达范围查询,比写两个比较条件更加简洁易读。
BETWEEN 基本语法
BETWEEN 用于判断一个值是否在指定的闭区间(包含边界值)内:
SELECT 列名 FROM 表名 WHERE 列名 BETWEEN 下限 AND 上限;
这等价于:
SELECT 列名 FROM 表名 WHERE 列名 >= 下限 AND 列名 <= 上限;
数值范围查询
-- 查询分数在70到90之间(含70和90)的学生
SELECT * FROM students WHERE score BETWEEN 70 AND 90;
-- 查询年龄不在20到25之间的学生
SELECT * FROM students WHERE age NOT BETWEEN 20 AND 25;
-- 结合其他条件
SELECT * FROM students
WHERE score BETWEEN 70 AND 90 AND age < 22;
日期范围查询
BETWEEN 在日期查询中尤为常用:
-- 查询2024年的订单
SELECT * FROM orders WHERE order_date BETWEEN '2024-01-01' AND '2024-12-31';
-- 查询最近7天的数据
SELECT * FROM logs
WHERE log_date BETWEEN DATE('now', '-7 days') AND DATE('now');
字符串范围查询
BETWEEN 也可以用于字符串(按字典序比较):
-- 查询姓名以A到M开头的学生
SELECT * FROM students WHERE name BETWEEN 'A' AND 'M';
-- 查询产品编号在指定范围
SELECT * FROM products WHERE code BETWEEN 'P001' AND 'P100';
BETWEEN vs >= AND <=
| 特性 | BETWEEN | >= AND <= |
|---|---|---|
| 可读性 | 更直观、更接近自然语言 | 较冗长 |
| 边界 | 闭区间(包含两端) | 包含两端 |
| 性能 | 优化器通常同等处理 | 同等 |
| 灵活性 | 只能做闭区间判断 | 可做开区间 > < |
注意事项
- BETWEEN 的边界顺序必须是小值 AND 大值,写反会导致空结果:
BETWEEN 90 AND 70永远返回 0 行 - NOT BETWEEN 排除的是闭区间内的值,即不包含边界
- 对于 NULL 值,BETWEEN 的结果永远是 NULL(未知),不会返回该行
- 日期比较时注意时区和格式一致性
实战任务
- 查询分数在 60 到 80 之间的所有学生
- 查询年龄不在 18 到 25 之间的学生
- 查询 2026 年 1 月到 3 月注册的用户