oracle树中prior的用法

数据说明一切:

create table dept(deptno number,deptname varchar2(20),mgrno number);
insert into dept values (1, '总公司', null);
insert into dept values (2, '浙江分公司', 1);
insert into dept values (3, '杭州分公司', 2);
commit;

 

select t.* from dept t;

 

      DEPTNO    DEPTNAME    MGRNO
1    1    总公司   
2    2    浙江分公司    1
3    3    杭州分公司    2

select *  from dept   connect by prior mgrno=deptno ; --以子结点为开始向根结点遍历

 

      DEPTNO    DEPTNAME    MGRNO
1    1    总公司   
2    2    浙江分公司    1
3    1    总公司   
4    3    杭州分公司    2
5    2    浙江分公司    1
6    1    总公司   

 select  *  from dept start with mgrno=1 connect by prior mgrno=deptno ---以子结点为开始且开始为1,的遍历

       DEPTNO    DEPTNAME    MGRNO
1    2    浙江分公司    1
2    1    总公司   

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

select   from dept  connect by prior deptno= mgrno

 

        DEPTNO    DEPTNAME    MGRNO
1    2    浙江分公司    1
2    3    杭州分公司    2
3    3    杭州分公司    2
4    1    总公司   
5    2    浙江分公司    1
6    3    杭州分公司    2

 

select *  from dept start with mgrno=1 connect by prior deptno= mgrno

       DEPTNO    DEPTNAME    MGRNO
1    2    浙江分公司    1
2    3    杭州分公司    2

 

 总结:
1)prior放在子节点端,则表示扫描树是以start with指定的节点作为根节点从上往下扫描。可能对应一个或多个分支。
start with可以省略,如果省略,表示对所有节点都当成根节点分别进行遍历
2)prior放在父节点端,则表示扫描树是以start with指定的节点作为最低层子节点,从下往上扫描。顺序是子节点往父节点扫描,直到根节点为止,这种情况只能得到一个分支。
start with可以省略,如果省略,表示对所有节点都当成最低层子节点分别往根节点方向遍历

 

最后会了上面大家应该知道下面 sys_connect_path()

 sys_connect_by_path 函数主要作用是可以把一个父节点下的所有子节点通过某个字符进行区分,然后连接在一个列中显示:

 select/* max(substr(*/sys_connect_by_path(deptname,',')/*,2))*/  from dept connect by prior deptno= mgrno;

        SYS_CONNECT_BY_PATH(DEPTNAME,'
1    ,浙江分公司
2    ,浙江分公司,杭州分公司
3    ,杭州分公司
4    ,总公司
5    ,总公司,浙江分公司
6    ,总公司,浙江分公司,杭州分公司

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值