天天看點

Oracle 遞歸查詢 (start with ...connect by ...prior)

1、connect by 是結構化查詢中用到的,其基本文法是:

select … from tablename

start with 條件1

connect by 條件2

where 條件3;

例:

select * from table

start with org_id = ‘HBHqfWGWPy’

connect by prior org_id = parent_id;    簡單說來是将一個樹狀結構存儲在一張表裡,比如一個表中存在兩個字段:

org_id,parent_id那麼通過表示每一條記錄的parent是誰,就可以形成一個樹狀結構。         用上述文法的查詢可以取得這棵樹的所有記錄。

        其中:

        條件1 是根結點的限定語句,當然可以放寬限定條件,以取得多個根結點,實際就是多棵樹。

        條件2 是連接配接條件,其中用 PRIOR表示上一條記錄,比如  CONNECT BY  PRIOR org_id = parent_id;就是說 上一條記錄的org_id 是本條記錄的parent_id,即本記錄的父親是上一條記錄。 例子中表示:從org_id的值為HBHqfWGWPy的這條記錄開始查詢,将該條記錄的org_id 等于即将查詢記錄的 parent_id的所有記錄查詢出來,即查詢org_id的值為HBHqfWGWPy這條記錄的所有子節點。

         條件3 是過濾條件,用于對傳回的所有記錄進行過濾。 2.關于PRIOR

        運算符PRIOR被放置于等号前後的位置,決定着查詢時的檢索順序。

        PRIOR被置于CONNECT BY子句中等号的前面時,則強制從根節點到葉節點的順序檢索,即由父節點向子節點方向通過樹結構,我們稱之為自頂向下的方式。如:

         CONNECT BY PRIOR EMPNO=MGR

         PIROR運算符被置于CONNECT BY 子句中等号的後面時,則強制從葉節點到根節點的順序檢索,即由子節點向父節點方向通過樹結構,我們稱之為自底向上的方式。 例如:

         CONNECT BY EMPNO=PRIOR MGR

         在這種方式中也應指定一個開始的節點。

轉載于:https://www.cnblogs.com/gXing/p/9298152.html