在 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 → <code>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')
