AND优先级高于OR,混合使用时必须加括号,否则逻辑错误;AND表示所有条件为真才匹配,OR表示任一条件为真即匹配。

在 MySQL 中,AND 和 OR 是用于组合多个条件的关键字,配合 WHERE 子句实现多条件查询。关键在于理解它们的逻辑优先级和正确加括号,否则容易查出不符合预期的结果。
AND 和 OR 的基本用法
AND 表示“且”,所有条件都必须为真,整条记录才被选中;OR 表示“或”,只要有一个条件为真,记录就会被选中。
例如:
-
SELECT * FROM users WHERE age > 18 AND status = 'active';—— 查找成年且状态活跃的用户 -
SELECT * FROM users WHERE city = 'Beijing' OR city = 'Shanghai';—— 查找来自北京或上海的用户
混合使用 AND 和 OR 时务必加括号
AND 的运算优先级高于 OR(类似数学中乘法先于加法)。不加括号可能导致逻辑错误。
错误写法(易误解):
WHERE status = 'active' OR role = 'admin' AND age
实际等价于:WHERE status = 'active' OR (role = 'admin' AND age ,不是你想表达的“(活跃或管理员)且年龄小于30”。
正确写法(按意图分组):
- 要查“活跃用户或管理员”,且“年龄小于30”:
WHERE (status = 'active' OR role = 'admin') AND age - 要查“是管理员且年龄小于30”,或者“状态是活跃”:
WHERE (role = 'admin' AND age
用 IN 替代多个 OR 提升可读性和性能
当对同一字段做多个“等于”判断时,用 IN 比堆砌 OR 更简洁高效。
- 不推荐:
WHERE city = 'Beijing' OR city = 'Shanghai' OR city = 'Guangzhou' - 推荐:
WHERE city IN ('Beijing', 'Shanghai', 'Guangzhou')
注意:IN 中的值类型需一致,避免隐式类型转换导致索引失效。
结合其他操作符增强条件表达能力
多条件查询常与以下操作符配合使用:
-
BETWEEN ... AND ...:替代两个比较(如age >= 18 AND age →age BETWEEN 18 AND 65) -
IS NULL或IS NOT NULL:判断空值(WHERE email IS NULL AND status = 'pending') -
LIKE+AND:模糊匹配加其他限定(WHERE name LIKE '%li%' AND gender = 'M')










