You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL中使用AND与OR查询分类:(A OR B) AND (C)操作可行吗?

SQL中WHERE子句支持(A OR B) AND (C)逻辑操作吗?

当然支持!这种(A OR B) AND C的逻辑组合在SQL的WHERE子句里完全合法,而且是多条件分类筛选时的常用写法。

关键注意点:运算符优先级

要特别留意的是,SQL里AND的优先级高于OR。如果你省略括号直接写A OR B AND C,SQL会自动解析成A OR (B AND C),这和你想要的(A OR B) AND C逻辑完全不同。所以一定要用括号明确分组,确保逻辑符合预期。

结合你的表结构示例

假设我们给Fruits表补充一个category_id字段(用来关联Categories表的分类),补充后的表数据如下:

Fruits表(补充关联字段后)

+----+--------+-------------+
| id | name   | category_id |
+----+--------+-------------+
| 1  | Apple  | 1           | -- 对应Red分类
| 2  | Banana | 2           | -- 对应Yellow分类
| 3  | Cherry | 1           | -- 对应Red分类
+----+--------+-------------+

如果我们需要筛选颜色为Red或Yellow,且分类组为colour的水果,就可以用(A OR B) AND C的逻辑写查询:

SELECT f.name AS fruit_name, c.name AS category, c.group_name
FROM Fruits f
JOIN Categories c ON f.category_id = c.id
WHERE (c.name = 'Red' OR c.name = 'Yellow') 
  AND c.group_name = 'colour';

执行这个查询后,会得到以下结果:

+------------+----------+------------+
| fruit_name | category | group_name |
+------------+----------+------------+
| Apple      | Red      | colour     |
| Banana     | Yellow   | colour     |
| Cherry     | Red      | colour     |
+------------+----------+------------+

反例:省略括号的问题

如果我们去掉括号写成下面的查询:

WHERE c.name = 'Red' OR c.name = 'Yellow' AND c.group_name = 'colour'

SQL会先执行c.name = 'Yellow' AND c.group_name = 'colour',再和c.name = 'Red'做OR运算。如果Categories表存在其他组的分类(比如group_name='taste'的Sweet分类),这个查询会错误地把所有Red颜色的水果(不管所属组)都筛选出来,逻辑就不符合需求了。

总之,只要通过括号明确逻辑分组,这种(OR组合) AND 条件的写法完全可以放心使用,是SQL筛选的基础操作之一。

内容的提问来源于stack exchange,提问作者Likit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:37:15