ORACLE 提供了一个有趣的功能 connect by 子句

ORACLE 提供了一个有趣的功能 connect by 子句,它可以对具有家族树结构的分枝进行排序。它的用途有 机构或公司的各层结构,财务的科目代码等。

要使用查询遍历,需要在将数据在基表中按照层次结构进行存储。比如一个组织机构就是这样的典型例子。

 

实现语句:

 

SELECT column

FROM  table_name

START WITH  column=value

CONNECT  BY  PRIOR  父主键=子外键

 

1:在ORACLEEMP 表中,每一条记录都有一个唯一标识当前雇员的empno和标识这个雇员的经理的mgr列。如果mgr 为空,则该雇员是该机构的最顶级。现在要列出每个雇员的层次结构(从顶到底)

 

select lpad(' ',4*(level-1))||ename name ,empno,mgr from emp

  start with mgr is null

  connect by prior empno=mgr;

 

NAME                    EMPNO      MGR

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

KING                      7839

    JONES                 7566      7839

        SCOTT             7788      7566

            ADAMS        7876      7788

        FORD              7902      7566

            SMITH         7369      7902

    BLAKE                 7698      7839

        ALLEN             7499      7698

        WARD              7521      7698

        MARTIN            7654      7698

        TURNER            7844      7698

        JAMES             7900       7698

    CLARK                 7782      7839

        MILLER            7934       7782

 

14 rows selected.

 

SQL>

 

从查询结果中可以看出,由于JONESBLAKECLARK的上司是KING,所以JONESMGR(经理编号)=KINGempno号,即KING的直接下级是JONESBLAKECLARK,因为他们的MGRKINGEMPNO一样。

摘录(oracle8i/9i 数据库基础  赵元杰)

这个功能蛮有意思的,做树形菜单或权限菜单用起来很好用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值