在SQL中,使用带括号的括号是什么意思?

joh*_*nny 1 sql oracle operator-precedence associativity

例:

select count(*) from my table
where
column1 is not null
and
(column1 = 4 OR column1 = 5)
Run Code Online (Sandbox Code Playgroud)

例2:

select count(*) from my table
where
column1 is not null
and
column1 = 4 OR column1 = 5
Run Code Online (Sandbox Code Playgroud)

在我的数据库中有真正的列名,我得到两个不同的结果.带括号的那个是对的,因为如果我这样做:

select count(*) from my table
where
column1 is not null
and
column1 = 4
Run Code Online (Sandbox Code Playgroud)

然后

select count(*) from my table
where
column1 is not null
and
column1 = 5
Run Code Online (Sandbox Code Playgroud)

并将它们加在一起,我得到正确答案......我想.与上面括号的第一个示例相同.

为什么通过更改OR测试的优先级会得到不同的结果?

Cyb*_*ude 7

它不是Oracle或SQL.这是基本的布尔逻辑.AND条件比OR更"强"(优先级),这意味着它将首先被评估:

column1 is not null
and
column1 = 4 OR column1 = 5
Run Code Online (Sandbox Code Playgroud)

手段

column1 is not null
and
column1 = 4
Run Code Online (Sandbox Code Playgroud)

首先评估,然后在此和之间应用OR column1 = 5

添加括号可确保首先评估OR,然后评估AND.

非常像数学:

2 * 3 + 5 = 6 + 5 = 11
Run Code Online (Sandbox Code Playgroud)

2 * (3 + 5) = 2 * 8 = 16
Run Code Online (Sandbox Code Playgroud)

更多阅读:http://msdn.microsoft.com/en-us/library/ms190276.aspx

  • @colithium:不正确。Oracle 将“AND”定义为比“OR”具有更高的优先级。http://docs.oracle.com/cd/E11882_01/server.112/e26088/conditions001.htm#i1034834 不仅是 Oracle,还有 MS SQL Server。http://msdn.microsoft.com/en-us/library/ms190276.aspx (2认同)
  • @ShannonSeverance哇,我真的很高兴当条件复杂时我使用了很多括号,因为这些年来我一直在思考,否则就不会刺痛我 (2认同)