connect by…start with...

 

描述树型结构表时,需要依此访问树结构的每个节点,一个节点只能访问一次,其访问的步骤如下:

1、从根节点开始

2、访问该节点

3、判断该节点有无未被访问的子节点,若有则转向它最左侧的未被访问的叶子节点,并执行第二步,若无则执行第四步

4、若该节点为根节点,则访问完毕,否则执行第五步

5、返回到该节点的父节点,并执行第三步

 

总之,扫描整个树结构的过程也既是中序遍历树的过程

 

 

Oracle中的SELECT语句可以用CONNECT BY...START WITH...子句实现递归查询,CONNECT BY是结构

化查询中用到的,其基本语法是:

SELECT * FROM tablename CONNECT BY {PRIOR 列名1=列名2|列名1=PRIOR 列名2} [START WITH]

 

CONNECT BY

说明每行数据将是按层次顺序检索,并规定将表中的数据连入树型结构的关系中。

 

START WITH

这是可选的,用来标识哪个节点作为查找树型结构的根节点,可以有一个或多个根节点。若它被忽略,则表示所有满足查询条件的节点作为根节点。

 

PRIOR

运算符“PRIOR”必须置于连接关系的两列中某一个的前面。

对于节点间的父子关系,PRIOR运算符在一侧表示父节点,在另一侧表示子节点,从而确定查找树结构的顺序是自顶向下还是自底向上。

在连接关系中,除了可以使用列名外,还允许使用列表达式。

PRIOR被置于CONNECT BY子句中等号的前面时,则强制从根节点到叶节点的顺序检索,即由父节点向子节点方向通过树结构,称之为自顶向下方式。

PRIOR被置于CONNECT BY子句中等号的后面时,则强制从叶节点到根节点的顺序检索,即由子节点向父节点方向通过树结构,称之为自底向上方式。

 

自底向上:查找过程中只有树中的一枝被显示,这是因为在树型结构中每一个节点只允许有一个父节

点。其查找过程是从开始节点起,找到其父节点,再由其父节点向上找到父节点的父节点。这样一直找到根节点为止,结果就是树中一枝的数据。

 

自顶向下:在自顶向下查找树型结构,不但可以从根节点开始,还可以定义任何节点为起始节点,以

些开始向下查找。这样查找的结果就是以该节点为开始节点的结构树中的一枝。

 

在具有树型结构的表中,每一行数据都是树型结构中的一个节点。由于节点所处的层次位置不同,所

以每行记录都可以有一个层号。层号根据节点与根节点的距离确定,不论从哪个节点开始,该起始根节点的层号始终为1根节点的子节点为2,依次类推。

 

在查询中可以使用伪列LEVEL显示每行数据的有关层次。LEVEL将返回树型结构中当前节点的层次,我

们可以使用LEVEL来控制对树型结构进行遍历的深度。

 

可以使用WHERE来限定树型结构中的单个节点,以去掉树中的单个节点,但它却不影响其后代节点

(自顶向下)或前辈节点(自底向上)。

如:SELECT * FROM tablename where 条件表达式 CONNECT BY… START WITH…

去掉树型结构中的整个分枝(包括子节点或父节点)

如:SELECT * FROM tablename CONNECT BY 连接表达式 AND 条件表达式 START WITH…

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值