.## 1. 介绍
在 MySQL 数据库中高效执行查询的关键要素之一是 BETWEEN 运算符。该运算符在检查数据是否落在特定范围内时非常有用,可用于为数字、日期和字符串指定范围,从而在数据库搜索和过滤中实现高效的数据提取。本文将详细说明 MySQL BETWEEN 运算符的使用方法、实际示例以及需要注意的重要事项。
2. BETWEEN 运算符的基本语法
BETWEEN 运算符概述
BETWEEN 运算符是 WHERE 子句中使用的条件,用于检查特定列的值是否位于定义的范围内。基本语法如下:
SELECT column_name
FROM table_name
WHERE column_name BETWEEN start_value AND end_value;
例如,如果一张表存储了员工年龄,你可以使用该运算符提取年龄位于特定区间的员工。
否定形式:NOT BETWEEN
如果想搜索不在指定范围内的值,请使用否定形式 NOT BETWEEN。
SELECT column_name
FROM table_name
WHERE column_name NOT BETWEEN start_value AND end_value;
3. 指定数值范围
使用 BETWEEN 指定数值范围
BETWEEN 运算符在指定数值范围时非常方便。例如,要提取员工工资在 50,000 到 100,000 之间的数据,查询语句如下:
SELECT employee_id, name, salary
FROM employees
WHERE salary BETWEEN 50000 AND 100000;
示例数据:
| employee_id | name | salary |
|---|---|---|
| 1 | Sato | 45000 |
| 2 | Suzuki | 55000 |
| 3 | Takahashi | 75000 |
| 4 | Tanaka | 120000 |
执行结果:
| employee_id | name | salary |
|---|---|---|
| 2 | Suzuki | 55000 |
| 3 | Takahashi | 75000 |
在上述查询中,仅会选取工资介于 50,000 与 100,000 之间的员工。
与比较运算符的区别
如果使用比较运算符来表达相同的条件,写法如下:
SELECT employee_id, name, salary
FROM employees
WHERE salary >= 50000 AND salary <= 100000;
使用 BETWEEN 可以使查询更简洁,提升可读性。尤其在涉及多个范围条件时,BETWEEN 能让查询更易于理解。

4. 指定日期范围
在日期数据中使用 BETWEEN
BETWEEN 也可用于指定日期范围。例如,要从 orders 表中提取 2024 年 1 月 1 日至 2024 年 12 月 31 日之间的订单,查询语句如下:
SELECT order_id, customer_id, order_date
FROM orders
WHERE order_date BETWEEN '2024-01-01' AND '2024-12-31';
示例数据:
| order_id | customer_id | order_date |
|---|---|---|
| 1 | 101 | 2024-01-15 |
| 2 | 102 | 2024-05-30 |
| 3 | 103 | 2025-03-01 |
执行结果:
| order_id | customer_id | order_date |
|---|---|---|
| 1 | 101 | 2024-01-15 |
| 2 | 102 | 2024-05-30 |
如上所示,BETWEEN 运算符提取了指定日期范围内的数据。
处理时间数据
如果日期数据包含时间,需要特别注意。例如,order_date 列的类型为 DATETIME,且包含时间值时,使用 BETWEEN 指定范围会包括起始日期午夜至结束日期 23:59:59 之间的记录。
WHERE order_date BETWEEN '2024-01-01 00:00:00' AND '2024-12-31 23:59:59';
5. 指定字符串范围
在字符串数据中使用 BETWEEN
BETWEEN 运算符同样适用于字符串数据。例如,要搜索名称在 'A' 与 'M' 之间的产品,查询语句如下:
SELECT product_id, product_name
FROM products
WHERE product_name BETWEEN 'A' AND 'M';
示例数据:
| product_id | product_name |
|---|---|
| 1 | Apple |
| 2 | Banana |
| 3 | Mango |
| 4 | Orange |
执行结果:
| product_id | product_name |
|---|---|
| 1 | Apple |
| 2 | Banana |
| 3 | Mango |
字母顺序注意事项
在指定字符串范围时,默认假设字符串按字母顺序排列。由于数据库的排序规则(collation)可能区分大小写,需谨慎处理。例如,'a' 与 'A' 可能被视为不同的值。
6. 使用 BETWEEN 时的重要注意事项
范围顺序很重要
使用 BETWEEN 运算符时,要注意起始值和结束值的顺序。如果起始值大于结束值,查询可能会返回意外的结果。
SELECT * FROM table_name WHERE column_name BETWEEN 100 AND 50; -- unintended result
此外,由于 BETWEEN 包含两个边界值,选择起始值和结束值时必须谨慎。
索引使用与效率
BETWEEN 运算符的性能通常与标准比较运算符相当。然而,要优化查询性能,正确的索引至关重要。当索引配置妥当时,使用 BETWEEN 运算符的查询执行速度会提升。例如,在日期列上建立索引可以使日期范围查询更加高效。
7. 实用查询与高级示例
在多列中使用 BETWEEN
BETWEEN 运算符也可以在多列之间组合使用。例如,在同时指定产品价格和库存数量进行范围搜索时,可以使用以下查询:
SELECT product_name, price, stock
FROM products
WHERE price BETWEEN 1000 AND 5000
AND stock BETWEEN 50 AND 200;
此查询会搜索价格在 1,000 到 5,000 之间且库存数量在 50 到 200 之间的产品。
NOT BETWEEN 高级示例
使用否定形式 NOT BETWEEN 可以提取指定范围之外的数据。例如,要搜索薪资低于 50,000 或高于 100,000 的员工,可按如下方式编写查询:
SELECT employee_id, name, salary
FROM employees
WHERE salary NOT BETWEEN 50000 AND 100000;
执行结果:
| employee_id | name | salary |
|---|---|---|
| 1 | Sato | 45000 |
| 4 | Tanaka | 120000 |
此查询会检索薪资不在 50,000 到 100,000 范围内的员工。使用 NOT BETWEEN 可以轻松基于相反条件提取数据。
8. 可视化查询示例
为了直观展示查询结果,使用简易图示会更有效。例如,下面的示意图解释了 BETWEEN 的工作原理:
Price range: [----- 1000 ---- 5000 -----]
Product A price: 3000 (within range)
Product B price: 6000 (outside range)
使用这样的图示可以更直观地理解数据是否落在指定的查询范围内。
9. 总结
BETWEEN 运算符是 MySQL 中进行基于范围搜索的极其有用的工具。它可用于数值、日期和字符串数据,使查询能够简洁高效地编写。然而,需要了解诸如边界值包含以及正确使用索引等关键注意事项。通过运用这些知识,你可以优化数据库查询性能,并高效地提取所需数据。
10. 参考文献
欲获取更多细节和使用示例,请参阅官方 MySQL 文档及专业数据库教材。自行练习查询将进一步加深对 BETWEEN 运算符的理解。


