在WHERE子句中需要内括号吗?或任何地方



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

相关内容

  • 没有找到相关文章

最新更新