Oracle兼容之层次查询:层次查询高级特性分析
2008-09-04 12:50:44 来源:WEB开发网在使用层次查询时,需要对数据层次图中的环进行处理以避免结果集的循环;需要对层次查询中where语句提出的过滤条件进行考虑;还需要注意层次查询的性能;本文将就层次查询中环的判断与处理,层次查询中过滤条件的处理以及性能的提高进行分析。
Selectlevel,connect_by_iscycle,connect_by_isleaf,parent,value
Fromt1
Connectbynocyclepriorvalue=parent
Startwithparent=1;
查询的结果为:
LEVELCONNECT_BY_ISCYCLECONNECT_BY_ISLEAFPARENTVALUE
-----------------------------------------------------------------
10012
20023
31135
30136
20124
由结果来看,元组(3,5)的CONNECT_BY_ISCYCLE的值为1,屏蔽掉了其子结点(5,2),而(5,2)并没有出现在其祖先结点中,但(5,2)的VALUE列的值2在其祖先结点(1,2)中已经出现过了。
由此推断,Oracle中层次查询的环的判断标准并不是判断子结点整个元组是否出现在祖先元组中,而是根据连接条件中表示父结点的PRIOR关键字标注的表达式的值是否在祖先结点中出现来进行判断的。
2.层次查询过滤条件的处理
层次查询语法中,使用WHERE语句来对层次查询的结果进行过滤,本节将就层次查询语句中的WHERE语句的处理进行分析。
2.1 单表层次查询过滤条件的处理
对单表进行层次查询时,WHERE语句只负责过滤数据,在得到层次查询的结果集进行判断,将满足WHERE语句指定的逻辑表达式的元组返回。
2.2 多表层次查询过滤条件的处理
对多表进行层次查询,层次查询的直接对象是多个表连接之后的数据集。而WHERE语句中的逻辑表达式如何处理是个问题。有两种合理的处理方式:
更多精彩
赞助商链接