start with connect by prior 递归查询用法

这个子句主要是用于B树结构类型的数据递归查询,给出B树结构类型中的任意一个结点,遍历其最终父结点或者子结点。

先看原始数据:

1 create table a_test 2 ( parentid varchar2(10), 3   subid    varchar2(10)); 4  5 insert into a_test values ( '1', '2' ); 6 insert into a_test values ( '1', '3' ); 7 insert into a_test values ( '2', '4' ); 8 insert into a_test values ( '2', '5' ); 9 insert into a_test values ( '3', '6' );10 insert into a_test values ( '3', '7' );11 insert into a_test values ( '5', '8' );12 insert into a_test values ( '5', '9' );13 insert into a_test values ( '7', '10' );14 insert into a_test values ( '7', '11' );15 insert into a_test values ( '10', '12' );16 insert into a_test values ( '10', '13' );17 18 commit;19 20 select * from a_test;

对应B树结构为:


接下来看一个示例:

要求给出其中一个结点值,求其最终父结点。以7为例,看一下代码

start with 子句:遍历起始条件,有个小技巧,如果要查父结点,这里可以用子结点的列,反之亦然。

connect by 子句:连接条件。关键词prior,prior跟父节点列parentid放在一起,就是往父结点方向遍历;prior跟子结点列subid放在一起,则往叶子结点方向遍历,

parentid、subid两列谁放在“=”前都无所谓,关键是prior跟谁在一起。

order by 子句:排序,不用多说。

--------------------------------------------------

下面看看往叶子结点遍历的例子:

这里start with 子句用了parentid列,具体区别后面举例说明。

connect by 子句中,prior跟subid在同一边,就是往叶子结点方向遍历去了。因为7有两个子结点,所以第一级中有两个结果(10和11),10有两个子结点(12,13),11无,所以第二级也有两个结果(12,13)。即12,13就是叶子结点。





下面看下start with子句中选择不同的列的区别:

以查询叶子结点(往下遍历)为例

结果很明显,原意是要以7为父结点,遍历其子结点,左图取的是父结点列的值,结果符合原意;右图取的是子结点列的值,结果多余的显示了7 的父结点3.

---------------------------------------

关于where条件的语句,以后验证后再记录。先留个疑问

(0)

相关推荐

  • 关于JAVA递归遍历树级菜单结构

    需求一:这种不需要传任何参数 一.数据库存储的菜单结果: parentid为0的都是根节点,也就是一级菜单,后面的子菜单的parentid为父菜单的ID. 二.MenuDTO类(菜单类)的结构: @D ...

  • 数据结构与算法:22 精选练习50题

    精选练习50 马上就要期末考试或者考研了.为了大家复习的方便,我精选了有关数据结构与算法的50道选择题,大家可以抽空练习一下.公众号后台回复"答案"可以获取该50道题目的答案. 0 ...

  • Oracle 树操作、递归查询(select…start with…connect by…prior)

    一.Oracle中start with-connect by prior子句用法connect by 是结构化查询中用到的,其基本语法是:select - from tablenamestart wi ...

  • oracle中connect by prior的使用

    回到顶部 作用 connect by主要用于父子,祖孙,上下级等层级关系的查询 回到顶部 语法 { CONNECT BY [ NOCYCLE ] condition [AND condition].. ...

  • EXCEL Range用法集

    来源:博客园 网址:https://www.cnblogs.com/aademeng/articles/12952659.html 标签:Execl,Range,用法 收藏:株野 作者:天涯海角路 日 ...

  • 地支藏干用法

    地支藏干歌诀 子宫癸水在其中,丑癸辛金己土同: 寅宫甲木兼丙戊,卯宫乙木独一苗, 辰藏乙戊三分癸,巳中庚金丙戊丛: 午宫丁火己土同,未宫乙己丁共宗: 申位庚金壬水戊,酉宫辛金独丰隆: 戌宫辛金及丁戊, ...

  • 身和体的定义及用法

    ​易山/文 盲派命法,身旺不旺无所谓,体旺就行,体旺也能做事. 身:指日干. 体:指印比食伤禄(除财官以外的神). 身和体是取得财官的工具. 我的体能制住财官,我能踏实干事,能担当.制不住财官,偷奸耍 ...

  • 中学英语16种时态完美精讲(每一种用法配一例句)

    中学英语时态共有16种,分别是一般现在.一般过去.一般将来.过去将来时,以及这四者的进行时.完成时和完成进行时. 在不同的时态中,动词都会发生相应变化,时间状语的运用也会有所不同.究竟怎样区分不同时态 ...

  • 附子理中丸、桂附理中丸、枳实理中丸有什么区别?用法都在这了

    附子理中丸、桂附理中丸、枳实理中丸有什么区别?用法都在这了

  • 2.6 多条件“或”函数or的用法

    多条件"或"函数or的用法

  • 解题技巧:梳理总结高考导数的十四种用法

    文章行文思路如下: ..... 备考策略:高考数学最后一课(共8篇) 普通中学拔尖创新人才培养的关键路径与现实思考 数学编题那点事?--以教材为起点的试题设计