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