在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')
只有当操作符具有相同的优先级时,才从左向右求值。
完整的优先级列表,请参见:操作符优先级(Transact-SQL)