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测试的优先级会得到不同的结果?
它不是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
| 归档时间: |
|
| 查看次数: |
9597 次 |
| 最近记录: |