在嵌套和条件上应用OR条件

时间:2019-06-19 16:22:52

标签: sql oracle

我试图了解[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的新手,所以有点混乱?

感谢您的时间和帮助:-)

预先感谢

2 个答案:

答案 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