ORACLE提供了一个有趣的功能connect by子句,它可以对具有家族树结构的分枝进行排序。它的用途有机构或公司的各层结构,财务的科目代码等。要使用查询遍历,需要在将数据在基表中按照层次结构进行存储。比如一个组织机构就是这样的典型例子: 实现语句: SELECT column FROMtable_name START WITHcolumn=value CONNECTBYPRIOR父主键=子外键 例1:在ORACLE的EMP表中,每一条记录都有一个唯一标识当前雇员的empno和标识这个雇员的经理的mgr列。如果mgr为空,则该雇员是该机构的最顶级。现在要列出每个雇员的层次结构(从顶到底): select lpad(' ',4*(level-1))||ename name ,empno,mgr from emp start with mgr is null connect by prior empno=mgr; NAMEEMPNOMGR -------------------------------------- JONES75667839 SCOTT77887566 ADAMS78767788 FORD79027566 SMITH73697902 BLAKE76987839 ALLEN74997698 WARD75217698 MARTIN76547698 TURNER78447698 JAMES79007698 CLARK77827839 MILLER79347782 14 rows selected. SQL> 从查询结果中可以看出,由于JONES、BLAKE、CLARK的上司是KING,所以JONES等MGR(经理编号)=KING的empno号,即KING的直接下级是JONES、BLAKE、CLARK,因为他们的MGR与KING的EMPNO一样。
转载:http://space.itpub.net/7232789/viewspace-405435