WEB开发网
开发学院数据库Oracle Oracle兼容之层次查询:层次查询高级特性分析 阅读

Oracle兼容之层次查询:层次查询高级特性分析

 2008-09-04 12:50:44 来源:WEB开发网   
核心提示: 语句4可以等价于查询:select …… from (select * from t1,t2 where t1.a=t2.a or t1.a =1) where t1.a=1 connect by prior c=p start with p=0 and t1.

语句4可以等价于查询:select …… from (select * from t1,t2 where t1.a=t2.a or t1.a =1) where t1.a=1 connect by prior c=p start with p=0 and t1.a=1 and t2.a=0。

由or将不同类型的单个逻辑表达式连接起来的where语句,其整个语句将会作为connect by查询前的连接条件使用,而其中的涉及单个表的逻辑表达式同时又作为connect by查询之后的过滤条件使用。

综上我们可以总结一下几种简单情况下WHERE语句的处理方式。

首先将单个布尔表达式定义为两种类型。

类型1:诸如a=1的情况,单个布尔表达式最多只涉及一个表;

类型2:诸如t1.a=t2.b的情况,布尔表达式涉及两个以上的表。

相应的,由and或or等连接起来的布尔表达式子句也分为两种类型。

类型A:connect by执行后的过滤条件;

类型B:connect by执行前的连接条件。

根据之前我们的分析,可以得出Oracle层次查询中对where语句进行以下处理:

1、全部由类型1布尔表达式构成的子句,整个子句为A类型子句;

2、全部由类型2布尔表达式构成的子句,整个子句是B类型子句;

3、由and连接多个A类型子句和B类型子句构成的子句,其中所有A类型子句用and连接后为一个新的A类型子句;所有的B类型子句式用and连接后为一个新的B类型子句;

4、由or连接的A类型和B类型子句,整个子句为B类型子句;而其中所有A类型子句用or连接后成为一个新的A类型子句。

复杂的情况

之前几节分析了4中简单的情况,但是在查询时会出现更加复杂的,诸如a=b and c=d or c=1 或((a=b or b=1)and c=d )or c=1之类的由and和or共同组成的,同时单个表达式有的涉及单表有的涉及多表的情况。下面我们就层次查询应对这样的WHERE语句其进行的处理进行分析。

上一页  4 5 6 7 8 9 10  下一页

Tags:Oracle 兼容 层次

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接