Oracle兼容之层次查询:层次查询高级特性分析
2008-09-04 12:50:44 来源:WEB开发网为了方便分析,我会在查询结构之后将查询结果用图表示。框中数据的顺序为t2.a,t1.a,t1.p,t1.c。上述的结果的层次结构为如图2,图中虚线框的数据表示层次查询中在路径信息中出现但没有在结果中出现的数据,但是connect by查询之后被WHERE语句过滤掉的数据。
从结果可以看出,层次查询结果的路径信息中有(0,0,1,11)元组,但是却没有出现在结果中,该元组在层次查询之后过滤掉了,也就是说该语句的采取的处理方式是和单表相同的层次查询的where语句的处理方式:层次查询的直接对象是t1×t2,connect by查询之后的数据集用条件t1.a=1进行过滤;而不是对σt1.a=1(t1×t2)的数据集进行connect by查询。
如果WHERE语句的所有子逻辑表达式都只涉及了一个表的话,这样的WHERE语句不会作为多个表的连接条件,它将作为过滤条件在层次查询得到结果之后将结果集中满足条件的元组返回。
简单情况2
下面利用如下语句来分析当WHERE所有子逻辑表达式都只涉及多个表的情况。
语句2:
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.a
connectbypriorc=pstartwithp=0andt1.a=1;
查询的结果为:
LEVEL
PATH_A2
PATH_A1
PATH_P
PATH_C
A
A
P
C
1
/1
/1
/0
/1
1
1
0
1
2
/1/0
/1/0
/0/1
/1/11
0
0
1
11
3
/1/0/0
/1/0/0
/0/1/11
/1/11/111
0
0
11
111
3
/1/0/1
/1/0/1
/0/1/11
/1/11/111
1
1
11
111
2
/1/1
/1/1
/0/1
/1/11
1
1
1
11
3
/1/1/0
/1/1/0
/0/1/11
/1/11/111
0
0
11
111
3
/1/1/1
/1/1/1
/0/1/11
/1/11/111
1
1
11
111
结果显示查询的层次图如图3所示。
更多精彩
赞助商链接