SQL Server如何解读未加括号的WHERE子句?与加括号版本是否等价?
SQL Server中WHERE子句的AND/OR优先级问题
嘿,这个问题问到点子上了——SQL里的运算符优先级可是很多开发者容易忽略的细节!
直接给你答案:是的,SQL Server会把你提到的第一个无括号语句,解读为和带括号的第二个语句完全等价。
原因解释
在SQL的运算符规则里,AND的优先级要高于OR,就像数学运算里先算乘法再算加法一样。当WHERE子句同时包含AND和OR时,SQL Server会优先处理所有由AND连接的条件,把它们组合成独立的逻辑判断块,之后再用OR把这些块连接起来。
举个直观的例子,你的原语句:
WHERE C1 = 'one' AND C2 NOT IN ('apple','pear') AND C3 <> 'pie' OR C1 = 'two' AND C2 NOT IN ('apple','pear')
会被SQL Server自动拆解为如下的逻辑结构(和你手动加括号的写法完全一致):
WHERE (C1 = 'one' AND C2 NOT IN ('apple','pear') AND C3 <> 'pie') OR (C1 = 'two' AND C2 NOT IN ('apple','pear'))
额外建议
虽然这两个语句在功能上等价,但强烈推荐使用你加括号的写法。原因很简单:不是所有读代码的人都能准确记住运算符优先级,括号能直接把你的逻辑意图清晰展示出来,避免后续维护代码时产生误解,也能防止自己在调整条件时不小心踩到优先级的坑。
内容的提问来源于stack exchange,提问作者Chuck




