SQL多条件查询需用WHERE子句配合AND、OR及括号控制逻辑优先级;AND要求所有条件为真,OR满足其一即可;混合使用时必须加括号明确分组;IN可替代同一字段的多个OR,提升可读性与性能。

SQL多条件查询的核心是用 WHERE 子句配合 AND、OR 和括号控制优先级,写错逻辑容易查出错误数据或漏数据。
基础 AND 多条件(全部满足)
用 AND 连接多个条件时,所有条件都必须为真,整行才被返回。适合“既要A,又要B,还要C”的场景。
- 语法:WHERE 条件1 AND 条件2 AND 条件3
- 示例:查2023年销售额超5000且属于华东区的订单
SELECT * FROM orders WHERE YEAR(order_date) = 2023 AND amount > 5000 AND region = '华东';
基础 OR 多条件(满足任一)
用 OR 连接时,只要有一个条件为真就返回该行。注意它比 AND 优先级低,单独混用易出错。
- 示例:查状态是“已发货”或“已签收”的订单
SELECT * FROM orders WHERE status = '已发货' OR status = '已签收';
AND 和 OR 混合使用(必须加括号!)
混合时,AND 默认先于 OR 计算。不加括号可能结果完全偏离预期。推荐始终用括号明确分组。
- 错误写法(易误解):WHERE status = '已发货' OR status = '已签收' AND region = '华东' → 实际等价于 status='已发货' OR (status='已签收' AND region='华东')
- 正确写法(按业务意图分组):查“华东区的所有已发货订单”或“所有已签收订单”
SELECT * FROM orders WHERE (status = '已发货' AND region = '华东') OR status = '已签收';
进阶:IN + AND 组合替代多个 OR
当多个 OR 是对同一字段做等值判断(如 status='A' OR status='B' OR status='C'),用 IN 更简洁、可读性强、性能通常更好。
- 示例:查华东或华南区、且订单金额在3000–8000之间的客户
SELECT customer_id, amount, region FROM orders WHERE region IN ('华东', '华南') AND amount BETWEEN 3000 AND 8000;










