WHERE是MySQL中用于筛选数据的核心条件子句,必须配合SELECT、UPDATE或DELETE使用;支持单条件、字符串匹配(=、LIKE)、空值判断(IS NULL)、多条件组合(AND/OR/NOT)及优先级控制。

在 MySQL 中,WHERE 是用于筛选数据的核心条件子句,必须配合 SELECT、UPDATE 或 DELETE 使用,才能按指定规则过滤出符合条件的记录。
WHERE 基本语法与常见写法
最基础的用法是:在 SELECT 语句后加上 WHERE,后面跟一个或多个布尔表达式。MySQL 会逐行判断每条记录是否满足条件,只返回结果为 TRUE 的行。
-
单条件查询:
SELECT * FROM users WHERE age > 18; -
字符串匹配(注意大小写敏感性):
SELECT name FROM users WHERE city = '北京'; -
使用 LIKE 模糊查找:
SELECT * FROM products WHERE name LIKE '%手机%';(% 表示任意字符,_ 表示单个字符) -
空值判断不能用 = NULL,必须用 IS NULL:
SELECT * FROM orders WHERE shipped_date IS NULL;
组合多个条件:AND、OR、NOT
实际查询中往往需要同时满足多个条件,或满足其一即可,这时要用逻辑运算符连接。
-
AND 表示“且”:
SELECT * FROM students WHERE grade >= 85 AND gender = '女'; -
OR 表示“或”:
SELECT * FROM employees WHERE dept = '技术部' OR dept = '产品部'; -
NOT 表示“非”:
SELECT * FROM users WHERE NOT status = '禁用'; -
优先级注意:NOT > AND > OR;建议用括号明确逻辑顺序:
WHERE (age > 25 OR age
范围与集合类条件:IN、BETWEEN、IS NULL
这些写法让 WHERE 更简洁高效,避免重复写多个 OR。
-
BETWEEN 包含边界值,适合连续区间:
SELECT * FROM orders WHERE order_date BETWEEN '2024-01-01' AND '2024-12-31'; -
IN 用于匹配多个离散值:
SELECT * FROM products WHERE category_id IN (1, 3, 5); - NOT IN 要小心 NULL:若列表含 NULL,整条表达式可能返回空结果,建议先排除 NULL 或改用 EXISTS。
注意事项与性能提示
WHERE 看似简单,但写错或不注意细节容易查不到数据、结果异常,甚至拖慢查询速度。
- 字符串值必须加单引号,数字不用;日期推荐用 'YYYY-MM-DD' 格式。
- 区分大小写取决于字段的 collation,如 utf8mb4_0900_as_cs 是大小写敏感,_ai_ci 则不敏感。
- WHERE 中对字段做函数操作(如 WHERE YEAR(create_time) = 2024)会导致索引失效,应尽量改写为范围查询。
- LIKE 开头用 %(如 '%abc')无法走索引,结尾带 %(如 'abc%')可利用索引加速。










