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;