Oracle兼容之层次查询:层次查询高级特性分析
2008-09-04 12:50:44 来源:WEB开发网WHERE语句不进行特殊的处理,以所有表的笛卡儿集为层次查询的对象,然后将WHERE语句作为过滤层次查询后的过滤条件。
对WHERE语句中的逻辑表达式进行处理,根据相应的策略将where语句中的一部分逻辑表达式作为连接条件下放的层次查询下层的连接中去。这样的话层次查询的直接对象是以连接条件选择的笛卡儿集的一部分数据。而余下的逻辑表达式继续作为过滤条件对层次查询的结果集进行过滤。
也就是对例如 select * from t1,t2 where t1.f1=t2.c1 connect by prior t1.f1=t1.f2这样的语句。决定层次查询的直接对象到底是t1×t2 还是σt1.f1=t2.c1(t1×t2)的问题。下面利用如下数据就WHERE语句逻辑表达式的各种情况对Oracle的实现进行研究。
表t1:
Droptablet1;
Createtablet1(aint,pint,cint);
Insertintot1values(0,0,1);
Insertintot1values(0,1,11);
Insertintot1values(0,11,111);
Insertintot1values(1,0,1);
Insertintot1values(1,1,11);
Insertintot1values(1,11,111);
表t2:
Droptablet2;
Createtablet2(aint);
Insertintot2values(0);
Insertintot2values(1);
简单情况1
利用如下语句来分析当WHERE所有子逻辑表达式都只涉及一个表的情况。
语句1:
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=1
connectbypriorc=p
startwithp=0andt1.a=1andt2.a=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修改表的两种方式
更多精彩
赞助商链接