SQL多条件筛选是数据库查询的核心能力之一,AND和OR作为基础逻辑运算符,能够帮助开发者灵活组合查询条件,从海量数据中精准提取目标记录。掌握两者的使用规则和优先级逻辑,是实现正确查询的关键。

AND与OR基础用法
AND运算符用于连接多个条件,只有当所有条件都满足时,对应的记录才会被筛选出来,等价于逻辑与的关系。OR运算符则只要满足其中一个条件,记录就会被选中,等价于逻辑或的关系。
以用户表user_info为例,表结构如下:
| 字段名 | 类型 | 说明 |
|---|---|---|
| id | int | 用户ID |
| username | varchar | 用户名 |
| age | int | 年龄 |
| city | varchar | 所在城市 |
| status | tinyint | 状态 1正常 0禁用 |
AND运算符示例
查询年龄大于18岁且所在城市为北京的正常用户:
SELECT id, username, age, city FROM user_info WHERE age > 18 AND city = '北京' AND status = 1;
OR运算符示例
查询年龄小于18岁或者状态为禁用的用户:
SELECT id, username, age, city FROM user_info WHERE age < 18 OR status = 0;
优先级规则与括号使用
SQL中AND的优先级高于OR,如果不注意这个规则,很容易写出逻辑错误的查询。比如需要查询北京的正常用户,或者上海的所有用户,如果直接写条件不加括号,会得到错误结果。
错误示例
-- 错误写法,实际会先执行city='北京' AND status=1,再和city='上海'做OR运算 SELECT id, username, age, city FROM user_info WHERE city = '北京' AND status = 1 OR city = '上海';
上述错误写法会筛选出北京的正常用户,以及所有上海的用户(包括禁用状态的上海用户),不符合预期需求。
正确示例
-- 正确写法,用括号明确优先级 SELECT id, username, age, city FROM user_info WHERE (city = '北京' AND status = 1) OR city = '上海';
通过括号可以改变运算顺序,确保先执行括号内的条件组合,再和其他条件做逻辑运算,这是复杂多条件筛选时的必备技巧。
复杂多条件组合实战
实际业务中经常会出现多个AND和OR嵌套的场景,比如查询:年龄大于20岁,且(所在城市为广州或者深圳),同时状态为正常的用户。
SELECT id, username, age, city, status FROM user_info WHERE age > 20 AND (city = '广州' OR city = '深圳') AND status = 1;
如果不用括号,按照AND优先级高于OR的规则,查询会变成:年龄大于20岁且城市为广州,或者城市为深圳且状态为正常的用户,完全不符合业务需求。
注意事项
- 编写多条件查询时,建议优先梳理清楚业务逻辑,再用括号明确条件分组,避免依赖默认优先级。
- 如果条件中同时包含AND和OR,尽量全部添加括号,提升代码可读性,也减少逻辑错误的可能。
- 可以在查询后抽样验证结果,确认筛选逻辑和预期一致,尤其是在条件复杂的情况下。
提示:不同数据库(MySQL、PostgreSQL、Oracle等)对AND和OR的处理规则一致,上述示例适用于绝大多数关系型数据库。
总结
实现SQL多条件筛选的核心是正确理解AND和OR的逻辑关系与优先级,通过合理使用括号明确条件组合顺序。日常开发中养成加括号的习惯,既能避免逻辑错误,也能让查询语句的逻辑更清晰,方便后续维护。