基本语法

SELECT 字段列表

FROM 表名

WHERE 字段名 [NOT] BETWEEN 值1 AND 值2;

 

核心特点

1. 包含边界值:BETWEEN AND 查询包含两端的值(闭区间)

2. 适用于多种数据类型:数字、日期、字符串等

3. 可读性强:比使用 `>=` 和 `<=` 组合更直观

 

使用示例

1. 数字范围查询

查询年龄20到23岁之间的学生(包含20和23)

SELECT name, age 
FROM students 
WHERE age BETWEEN 20 AND 23;


等价于

SELECT name, age
FROM students
WHERE age >= 20 AND age <= 23;


2. 日期范围查询

查询2015-10-01到2016-05-01之间注册的学生

SELECT name, login_date
FROM students
WHERE login_date BETWEEN '2015-10-01' AND '2016-05-01';


3. 字符串范围查询

查询名字字母顺序在D到J之间的学生

SELECT name
FROM students
WHERE name BETWEEN 'D' AND 'J';


4. NOT BETWEEN 反向查询

查询年龄不在20到23岁之间的学生

SELECT name, age
FROM students
WHERE age NOT BETWEEN 20 AND 23;


注意事项

1. 边界值包含:

    `BETWEEN 20 AND 23` 包含20和23

    如果需要不包含边界,应使用 `>` 和 `<`

 

2. 参数顺序:

    第一个参数必须小于或等于第二个参数

    `BETWEEN 23 AND 20` 会返回空结果

 

3. 日期格式:

    使用标准格式 'YYYY-MM-DD' 或 'YYYY-MM-DD HH:MM:SS'

    不同格式可能导致查询结果不准确

 

4. 性能考虑:

    对索引列使用 BETWEEN 通常能有效利用索引

    大范围查询可能影响性能

 

高级用法

1. 与其他条件组合

查询20-23岁之间且身高≥170cm的女生

SELECT name, age, height
FROM students
WHERE age BETWEEN 20 AND 23
  AND height >= 170
  AND sex = 'F';


2. 在JOIN查询中使用

查询特定时间段内注册且购买了商品的学生

SELECT s.name, o.order_date
FROM students s
JOIN orders o ON s.id = o.student_id
WHERE o.order_date BETWEEN '2023-01-01' AND '2023-03-31';


3. 在聚合函数中使用

统计20-23岁学生的平均身高

SELECT AVG(height) AS avg_height
FROM students
WHERE age BETWEEN 20 AND 23;

与IN操作符的区别

特性BETWEEN ANDIN
适用场景连续范围离散值集合
语法示例WHERE age BETWEEN 20 AND 30WHERE age IN (20, 25, 30)
性能特点对范围索引友好对大量离散值可能性能下降


实际应用场景

1. 电商系统:查询特定价格区间的商品

   SELECT product_name, price
   FROM products
   WHERE price BETWEEN 100 AND 500;

2. 学校管理系统:查询特定分数段的学生

  

 SELECT student_name, score
   FROM exam_results
   WHERE score BETWEEN 80 AND 90;

3. 人力资源系统:查询特定入职时间段的员工

  

SELECT employee_name, hire_date
   FROM employees
   WHERE hire_date BETWEEN '2020-01-01' AND '2022-12-31';

BETWEEN AND 是 MySQL 中表达范围条件的高效方式,合理使用可以使 SQL 语句更加简洁易读,同时保持良好性能。

点赞(1)

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

Dotcpp在线编译      (登录可减少运行等待时间)