Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql WHERE子句中是否需要内括号?或任何地方_Sql_Sql Server_Parentheses - Fatal编程技术网

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

Sql WHERE子句中是否需要内括号?或任何地方,sql,sql-server,parentheses,Sql,Sql Server,Parentheses,在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 (

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

两者都是一样的,但根本不是我们想要的

在前两种情况下,数据的计算是否有可能不同?

这与数学中的情况类似

2 + 3 * 4   ==> 14

2 + (3 * 4)   ==> 14
((A.Title='EMP') AND (A.NAME='Mike')) OR (A.ID='9001')
因为乘法的优先级高于加法。如果你想在乘法之前做加法,你必须加括号

(2 + 3) * 4   ==> 20
在SQL中,
的优先级高于
<代码>=作为比较运算符,其优先级高于两者。因此,不需要内括号,因为
=
将始终首先执行。例如

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

2 + (3 * 4)   ==> 14
((A.Title='EMP') AND (A.NAME='Mike')) OR (A.ID='9001')
仅当要在
之前执行
时,才需要使用括号(即使它首先出现在表达式中):

只有当运算符具有相同的优先级时,才会从左到右对其求值

有关完整的优先级列表,请参见:

这就像在数学中一样

2 + 3 * 4   ==> 14

2 + (3 * 4)   ==> 14
((A.Title='EMP') AND (A.NAME='Mike')) OR (A.ID='9001')
因为乘法的优先级高于加法。如果你想在乘法之前做加法,你必须加括号

(2 + 3) * 4   ==> 20
在SQL中,
的优先级高于
<代码>=作为比较运算符,其优先级高于两者。因此,不需要内括号,因为
=
将始终首先执行。例如

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

2 + (3 * 4)   ==> 14
((A.Title='EMP') AND (A.NAME='Mike')) OR (A.ID='9001')
仅当要在
之前执行
时,才需要使用括号(即使它首先出现在表达式中):

只有当运算符具有相同的优先级时,才会从左到右对其求值


有关完整的优先级列表,请参见:

“两种条件之间的数据计算结果是否可能不同?”否。将单个布尔表达式括在括号内不会改变任何内容。@Larnu谢谢。有人告诉我其他事情,我必须确定。
如果A.NAME='Mike'或A.ID='9001'
,SQL不是Lisp。@Mike SMT
有人告诉我其他事情
具体是什么?这可能与你的想法无关<在二进制逻辑中,code>和的优先级高于
,因此在几乎所有语言中,
a或B和C与
(a或B)和C
不同。在数学上,它和加法和乘法没有什么不同。即使使用相同的符号,例如
+
对于ORPlease,建议查看此顶部关于“两个条件之间的数据求值是否可能不同?”的内容。否。将单个布尔表达式括在括号内不会改变任何内容。@Larnu谢谢。有人告诉我其他事情,我必须确定。
如果A.NAME='Mike'或A.ID='9001'
,SQL不是Lisp。@Mike SMT
有人告诉我其他事情
具体是什么?这可能与你的想法无关<在二进制逻辑中,code>和
的优先级高于
,因此在几乎所有语言中,
a或B和C与
(a或B)和C
不同。在数学上,它和加法和乘法没有什么不同。即使使用了相同的符号,例如,对于ORPlease,建议查看此顶部,我知道这是正确的。这个人说,首先需要内部帕伦进行评估。像这样的
和((A.NAME='Mike')或(A.ID='9001'))
,我不同意,但我不得不质疑我是否错了,所以我发布了这样的帖子:虽然不需要,但清晰性很重要,所以你可以把它们放在更复杂的条款中以便于阅读(特别是在and和OR混合的情况下,你可能会在没有任何参数的情况下得到你想要的,但你应该尝试向未来的读者澄清)。对,我知道。这个人说需要内部参数进行评估或首先评估。像这样
和((A.NAME='Mike')或(A.ID='9001'))
我不同意,但我不得不质疑我是否错了,所以我在so上发布了:虽然不需要,但清晰性很重要,所以你可以在更复杂的子句中加入它们以提高可读性(特别是在and和OR混合的情况下,你可以在没有任何参数的情况下得到你想要的,但你应该尝试为未来的读者澄清)。