Oracle兼容之层次查询:层次查询高级特性分析
2008-09-04 12:50:44 来源:WEB开发网如果语句2也是按照语句1相同的处理,以t1×t2作为connect by查询的直接对象,where语句被作为过滤器使用,那么在结果的路径信息中一定会出现t1.a<>t2.a的元组。但从上面的结果来看,层次查询的结果和路径中均没有出现t1.a<>t2.a的元组,我们可以肯定:语句2种的where语句不是作为connect by查询之后的过滤器,而是作为t1和t2的连接条件成为了connect by查询之前对其查询数据的过滤条件;也就是说,层次查询的不再是对t1×t2;而是对σt1.a=t2.a(t1×t2)的数据集进行connect by查询。
对于其中所有的单个逻辑表达式都涉及多个表的where语句,是将整个where语句作为connect by查询前的多表的连接条件使用。
之前的两个WHERE语句都是单纯的由一类逻辑表达式(涉及表的个数)构成。但对于同时含有两种类型的WHERE语句,理论上有以下几种处理方式:
1. 全部作为过滤条件,在connect by查询之后进行;
2. 全部作为连接条件,在connect by查询之前进行;
3. 一部分作为连接条件,一部分作为过滤条件。
下面将探讨各种情况下由两种逻辑表达式构成的查询。
简单情况3
情况3讨论由AND连接的不同种类的逻辑表达式的WHERE语句的处理情况。
语句3:
Selectlevel,
sys_connect_by_path(t2.a,'/')path_a2,
sys_connect_by_path(t1.a,'/')path_a1,
sys_connect_by_path(p,'/')path_p,
sys_connect_by_path(c,'/')path_c,t2.a,t1.a,p,c
fromt1,t2
wheret1.a=t2.aandt1.a=1
connectbypriorc=pstartwithp=0;
- ››oracle 中 UPDATE nowait 的使用方法
- ››Oracle ORA-12560解决方法
- ››Oracle 10g RAC 常用维护命令
- ››Oracle如何在ASM中定位文件的分布
- ››Oracle的DBMS_RANDOM.STRING 的用法
- ››oracle 外部表导入时间日期类型数据,多字段导入
- ››Oracle中查找重复记录
- ››oracle修改用户登录密码
- ››Oracle创建删除用户、角色、表空间、导入导出等命...
- ››Oracle中登陆时报ORA-28000: the account is lock...
- ››Oracle数据库在配置文件中更改最大连接数
- ››Oracle中在pl/sql developer修改表的两种方式
更多精彩
赞助商链接