ORACLE 層次結構查詢語句 start with connect by prior

ORACLE提供了一個有趣的功能connect by子句,它可以對具有家族樹結構的分枝進行排序。它的用途有機構或公司的各層結構,財務的科目代碼等。
要使用查詢遍歷,需要在將數據在基表中按照層次結構進行存儲。比如一個組織機構就是這樣的典型例子:
實現語句:

SELECT column
FROM table_name
START WITH column=value
CONNECT BY PRIOR 父主鍵=子外鍵

[code]
例1:在ORACLE的EMP表中,每一條記錄都有一個唯一標識當前僱員的empno和標識這個僱員的經理的mgr列。如果mgr爲空,則該僱員是該機構的最頂級。現在要列出每個僱員的層次結構(從頂到底):
[code="sql"]
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>

從查詢結果中可以看出,由於JONES、BLAKE、CLARK的上司是KING,所以JONES等MGR(經理編號)=KING的empno號,即KING的直接下級是JONES、BLAKE、CLARK,因爲他們的MGR與KING的EMPNO一樣。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章