首頁  >  文章  >  資料庫  >  oracle怎麼遞歸查詢子節點

oracle怎麼遞歸查詢子節點

WBOY
WBOY原創
2022-01-25 14:38:033279瀏覽

在oracle中,可以利用select語句遞迴查詢子節點,該語句的作用就是對錶資料進行簡單的查詢,語法為「SELECT * FROM 表名START WITH 條件1 CONNECT BY PRIOR 條件2 WHERE條件3”。

oracle怎麼遞歸查詢子節點

本教學操作環境:Windows10系統、Oracle 11g版、Dell G3電腦。

oracle怎麼遞迴查詢子節點

語法結構

SELECT ... FROM    + 表名  START WITH + 条件1 CONNECT BY PRIOR + 条件2  WHERE  + 条件3

條件1:是根節點的限定語句,當然可以放寬限定條件,以獲得多個根節點,也就是多棵樹;在連結關係中,除了可以使用列明外,還允許使用列表達式。 START WITH 子句為可選項,用來識別哪個節點作為尋找樹狀結構的根節點。若子句省略,則表示所有符合查詢條件的行作為根節點。

條件2:是連線條件,其中以PRIOR表示上一筆記錄,例如CONNECT BY PRIOR STUDENT_ID = GRADE_ID,意思是上一筆記錄的STUDENT_ID是本筆記錄的GRADE_ID,即本記錄的父親是上一筆記錄。 CONNECT BY子句說明每行資料將是依照層次順序檢索,並規定將表格中的資料連入樹狀結構的關係中。 PRIOR運算子必須放置在連結關係的2列中某一個的前面。對於節點間的父子關係,PRIOR運算子在一側表示父節點,在另一側表示子節點,從而確定查找樹結構的順序是自頂向下,還是自底向上。

條件3:是篩選條件,用於篩選傳回的記錄。

注意:

1,CONNECT BY PRIOR是結構化查詢中用到的;

2,START WITH... CONNECT BY PRIOR...的作用,簡單來說,就是將一個樹狀結構儲存在一張表裡。

透過子節點向根節點追朔.

select * from persons.dept start with deptid=76 connect by prior paredeptid=deptid

透過根節點遍歷子節點(不包含根節點).

select * from persons.dept start with paredeptid=0 connect by prior deptid=paredeptid

透過根節點遍歷子節點(包含根節點).

select * from persons.dept start with deptid=0 connect by prior deptid=paredeptid

可透過level 關鍵字查詢所在層次.

select a.*,level from persons.dept a start with paredeptid=0 connect by prior deptid=paredeptid

備註:

start with ...connect by 的用法, start with後面所跟的就是遞歸的種子。

遞歸的種子也就是遞歸開始的地方connect by 後面的"prior" 如果缺省:則只能查詢到符合條件的起始行,並不進行遞歸查詢;

connect by prior 後面所放的欄位是有關係的,它指明了查詢的方向。

練習: 透過子節點取得頂節點

select FIRST_VALUE(deptid) OVER (ORDER BY LEVEL DESC ROWS UNBOUNDED PRECEDING) AS firstdeptid from persons.dept start with deptid=76 connect by prior paredeptid=deptid

表格結構

DEPTID PAREDEPTID NAME
NUMBER NUMBER CHAR (40 Byte)

部門id 父部門id(所屬部門id) 部門名稱

推薦教學課程:《Oracle影片教學

以上是oracle怎麼遞歸查詢子節點的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn