WHERE 子句中是否需要内括号?或任何地方

Are inner parenthesis needed in the WHERE clause? or anywhere

在 WHERE 部分或任何真正有多个条件(如 OR)的地方,我知道外括号是必需的,但内括号是必需的吗?

例如我的假设是

WHERE A.Title='EMP'
AND ( (A.NAME='Mike') OR (A.ID='9001') )

写的一样

WHERE A.Title='EMP'
AND ( A.NAME='Mike' OR A.ID='9001' )

但是,如果我们删除外括号,那么我知道查询会有所不同。

示例:

WHERE A.Title='EMP'
AND (A.NAME='Mike') OR (A.ID='9001')

WHERE A.Title='EMP'
AND A.NAME='Mike' OR A.ID='9001'

两者是一回事,但完全不是我们想要的。

是否有可能在前两种情况下对数据进行不同的评估?

就像数学一样

2 + 3 * 4   ==> 14

相同
2 + (3 * 4)   ==> 14

因为乘法的优先级高于加法。如果要在乘法前做加法,必须加括号。

(2 + 3) * 4   ==> 20

在 SQL 中 AND 的优先级高于 OR= 作为比较运算符的优先级高于两者。因此不需要内括号,因为 = 总是先执行。例如

A.Title='EMP' AND A.NAME='Mike' OR A.ID='9001'

相同
((A.Title='EMP') AND (A.NAME='Mike')) OR (A.ID='9001')

仅当您想在 AND 之前执行 OR 时才需要括号(即使它首先出现在表达式中):

A.Title='EMP' AND (A.NAME='Mike' OR A.ID='9001')

只有当运算符具有相同的优先级时,它们才会从左到右计算。

有关完整的优先级列表,请参阅:Operator Precedence (Transact-SQL)