我试图了解[OR]条件如何在嵌套条件和条件上工作。
下面是我的示例查询
select * from t1 as a join t2 as b on a.id=b.id
where (a.value > 110 and a.value <= 120)
OR
(a.value > 120 and b.age > 20 and b.status='A')
以上语句将对完整的第一个(a.value> 110和a.value <= 120)和第二个(a.value> 120和b.age> 20并且b.status ='A')应用OR条件)或将OR条件应用于a.value <= 120和a.value> 120
有人可以帮忙了解一下,因为我是sql的新手,所以有点混乱?
感谢您的时间和帮助:-)
预先感谢
答案 0 :(得分:0)
该查询将从内部Baracket复杂条件s true返回数据
<Table>
<tr>
<td></td>
<td></td>
</tr>
<tr>
<td>latitude</td>
<td>038383</td>
</tr>
<tr>
<td>longitude</td>
<td> -304828</td>
</tr>
<tr>
<td></td>
<td></td>
</tr>
</Table>
因此,如果c1或c2为true,则查询将被保留数据,但如果c1和c1均为false,则查询将不会返回数据
答案 1 :(得分:0)
如果使用括号,答案是明确的,因为首先评估括号的内容,而不是括号之间的OR
。
在Oracle Condition Precendence中,AND
的排序顺序是之前 OR
,您甚至可以删除括号以获得相同的效果-参见下面的示例(简化为专注于重点)。
with cnt as (
select rownum id from dual connect by level <= 10)
select * from cnt where
(id > 3 and id <= 5) or (id >= 7 and id < 10);
ID
----------
4
5
7
8
9
with cnt as (
select rownum id from dual connect by level <= 10)
select * from cnt where
id > 3 and id <= 5 or id >= 7 and id < 10;
ID
----------
4
5
7
8
9
如果您想将OR
优先于AND
,则需要括号,例如下面的示例
(id < 3 or id < 7) and id > 1
如果删除括号,您将从以下谓词中获得结果:
id < 3 or (id < 7 and id > 1)
HTH