BETWEEN
和 IN
是 SQL 中常用的条件运算符,但功能和适用场景有显著区别:
1. BETWEEN
运算符
- 作用:筛选连续范围的值(闭区间,包含边界)。
- 语法:
WHERE 列名 BETWEEN 值1 AND 值2
- 等价于:
WHERE 列名 >= 值1 AND 列名 <= 值2
- 适用场景:
数字范围、日期范围等连续数据。
示例:WHERE price BETWEEN 50 AND 100
WHERE date BETWEEN '2023-01-01' AND '2023-12-31'
2. IN
运算符
- 作用:筛选离散值列表中的值。
- 语法:
WHERE 列名 IN (值1, 值2, ..., 值N)
- 等价于:
WHERE 列名 = 值1 OR 列名 = 值2 OR ... OR 列名 = 值N
- 适用场景:
匹配多个不连续的特定值(如枚举值)。
示例:WHERE country IN ('USA', 'Japan', 'Germany')
WHERE id IN (101, 205, 307)
核心区别总结
特性 | BETWEEN | IN |
---|
匹配方式 | 连续范围(闭区间) | 离散值列表 |
边界处理 | 包含边界值(>= AND <= ) | 仅匹配列表中的值 |
适用数据类型 | 数字、日期、时间等有序类型 | 任意类型(数字、文本、枚举等) |
性能 | 对索引友好(范围扫描) | 对大列表可能较慢(多值 OR 判断) |
灵活性 | 只能指定一个范围 | 可指定任意离散值组合 |
示例对比
表 products
id | price | category |
---|
1 | 80 | A |
2 | 120 | B |
3 | 50 | A |
4 | 100 | C |
查询 1:使用 BETWEEN
(连续范围)
SELECT * FROM products
WHERE price BETWEEN 50 AND 100;
结果:
id | price | category |
---|
1 | 80 | A |
3 | 50 | A |
4 | 100 | C |
查询 2:使用 IN
(离散值)
SELECT * FROM products
WHERE category IN ('A', 'C');
结果:
id | price | category |
---|
1 | 80 | A |
3 | 50 | A |
4 | 100 | C |
使用建议
- 用
BETWEEN
时确保值有序(如 值1 <= 值2
),否则无结果。 IN
可嵌套子查询,灵活性更强:WHERE id IN (SELECT product_id FROM orders WHERE year=2023)
- 两者可结合使用:
WHERE price BETWEEN 50 AND 100 AND category IN ('A', 'B')