如何在mysql中使用and和or_where多条件查询

来源:这里教程网 时间:2026-02-28 20:44:09 作者:

在 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'

相关推荐