[SQL]SQL Where语句中AND与OR的计算次序

SQL查询中AND与OR操作符的正确使用
本文详细解释了SQL查询中AND和OR操作符的作用,并通过实例展示了如何正确使用它们来避免歧义,确保查询结果符合预期。

AND 用在where子句中,用来指示检索满足所有给定条件的行,而OR用在where子句中,用来指示检索匹配任一给定条件的行。

Where子句中可包含任意数目的AND和OR操作符号,但是要注意在SQL规范中AND操作符的优先级要高于OR操作符。

若一时大意,操作符就会被错误组合,查询出来的结果也是与自己期望南辕北辙了。

 

假如需要列出价格为5元以上且由瑞兴生物制药公司或星城制药厂生产的所有产品

Select prod_name,prod_price From Products Where supply like '瑞兴%' or supply like '星城%' And prod_price>=10
prod_name                 prod_price
苯唑西林钠(苯唑青霉素)        6.50
头孢氨苄                       13.50
头孢羟氨苄                     8.00
硫酸庆大霉素                   15.00
红霉素                         5.50


这个查询的结果与自己期望的结果不一致。

硫酸庆大霉素                   15.00


此问题就是由于使用OR、AND操作符默认计算次序造成的,解决的方法就是使用括号明确地分组相应的操作符。

任何时候使用具有AND和OR操作的where子句,都应该使用括号明确地分组操作符消除歧义,不要过分的依赖默认计算次序。


 

### SQLAND OR 运算符的执行优先级 在 SQL 查询语句中,逻辑运算符 `AND` `OR` 的优先级决定了条件表达式的计算顺序。具体来说: - **`AND` 的优先级高于 `OR`**,这意味着当一个查询同时包含 `AND` `OR` 时,`AND` 条件会先被处理[^1]。 例如,在以下查询中: ```sql SELECT * FROM AA WHERE a > 1 OR b > 1 AND c > 1; ``` 该查询会被解释为: ```sql SELECT * FROM AA WHERE a > 1 OR (b > 1 AND c > 1); ``` 这表明即使存在多个逻辑操作符,`AND` 总是在 `OR` 之前被执行。 如果希望改变默认的执行顺序,则可以通过显式地使用圆括号 `( )` 来指定优先级。例如: ```sql SELECT * FROM AA WHERE (a > 1 OR b > 1) AND c > 1; ``` 在这种情况下,`(a > 1 OR b > 1)` 部分将首先求值,然后再 `c > 1` 结合通过 `AND` 操作连接起来[^2]。 进一步验证这一点可以参考实际数据库的行为测试案例。比如下面的例子展示了不同组合下结果的变化情况: ```sql -- 返回有记录的情况 select 1 from device_failure where 1 = 2 and 1 = 2 or 1 = 1 limit 1; -- 等价于此形式,因为 and 先于 or 计算 select 1 from device_failure where (1 = 2 and 1 = 2) or 1 = 1 limit 1; -- 不返回任何数据,由于改变了原意中的关联关系 select 1 from device_failure where 1 = 2 and (1 = 2 or 1 = 1) limit 1; ``` 这些例子清楚说明了如果不小心遗漏必要的括号可能会导致意外的结果[^3]. 另外值得注意的是某些复杂场景下的行为也可能受到其他因素影响,像 XML 路径表达式解析过程中遇到类似问题时同样遵循这样的原则[^4]: 综上所述,为了确保查询意图能够准确实现并减少潜在错误风险,在编写涉及多重布尔逻辑判断的标准SQL语句时建议始终采用明确界定各部分次序的方式即适当加入额外层次的小括弧来强化可读性可靠性.
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值