WHERE是MySQL中用于筛选记录的关键子句,必须跟在FROM或JOIN后,支持单/多条件组合,需注意字符串用单引号、NULL用IS NULL判断、逻辑优先级及括号分组,并应遵循索引使用规范以提升性能。

在 MySQL 中,WHERE 子句用于筛选满足特定条件的记录,是 SELECT、UPDATE、DELETE 等语句中最常用、最关键的过滤工具。用好 WHERE,核心在于准确表达逻辑关系和正确处理数据类型。
基础语法与常见写法
WHERE 必须紧跟在 FROM(或 JOIN)之后,支持单个条件或多条件组合。基本结构如下:
SELECT * FROM users WHERE age > 18;
UPDATE orders SET status = 'shipped' WHERE order_id = 1001;
注意:字符串值要用单引号('admin'),数字可不加引号(但推荐统一用引号避免隐式转换问题),NULL 要用 IS NULL 判断,不能用 = NULL。
多条件组合与逻辑运算符
使用 AND、OR、NOT 连接多个条件,优先级为 NOT > AND > OR,复杂逻辑建议用括号明确分组:
- SELECT * FROM products WHERE category = 'book' AND price BETWEEN 20 AND 80;
-
SELECT * FROM users WHERE city = 'Beijing' OR city = 'Shanghai';(等价于
city IN ('Beijing','Shanghai')) - SELECT * FROM logs WHERE level != 'DEBUG' AND created_at >= '2024-01-01';
常用条件表达式与易错点
除了常规比较(=、>、),这些操作符高频实用且容易出错:
-
IN / NOT IN:适用于枚举多个固定值,注意
IN中含NULL会导致整条条件结果为UNKNOWN,查不到数据 -
LIKE:模糊匹配,
%匹配任意长度字符,_匹配单个字符;中文或带特殊字符时注意转义(如\_)和索引失效风险 -
IS NULL / IS NOT NULL:判断空值唯一安全方式,
= NULL永远返回 false -
BETWEEN ... AND ...:闭区间,包含两端值,且要求前后值顺序正确(
BETWEEN 10 AND 5不生效)
性能与索引注意事项
WHERE 条件是否能走索引,直接影响查询速度:
- 尽量在
WHERE中使用索引列做等值或范围查询(如WHERE status = 'active') - 避免在索引列上使用函数或表达式(如
WHERE YEAR(create_time) = 2024会跳过索引) - 对文本字段用
LIKE时,前导通配符(LIKE '%abc')无法使用 B+Tree 索引,可考虑全文索引或倒序存储优化 - 用
EXPLAIN查看执行计划,确认type是否为ref或range,key是否显示用了哪个索引










