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)
在 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)