熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

ORACLE查詢樹型關系

2013-11-13 22:10:54  來源: Oracle 

  oracle中的select語句可以用START WITHCONNECT BY PRIOR子句實現遞歸查詢connect by 是結構化查詢中用到的其基本語法是

  select * from tablename start with cond

  connect by cond

  where cond;

  簡單說來是將一個樹狀結構存儲在一張表裡比如一個表中存在兩個字段:

  idparentid那麼通過表示每一條記錄的parent是誰就可以形成一個樹狀結構

  用上述語法的查詢可以取得這棵樹的所有記錄

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

  COND是連接條件其中用PRIOR表示上一條記錄比如 CONNECT BY PRIOR ID=PRAENTID就是說上一條記錄的ID是本條記錄的PRAENTID即本記錄的父親是上一條記錄

  COND是過濾條件用於對返回的所有記錄進行過濾

  對於oracle進行簡單樹查詢(遞歸查詢)

  DEPTID           NUMBER                   部門id

  PAREDEPTID   NUMBER                   父部門id(所屬部門id)

  NAME              CHAR ( Byte)        部門名稱

  通過子節點向根節點追朔

  select * from personsdept start with deptid= connect by prior paredeptid=deptid

  通過根節點遍歷子節點

  select * from personsdept start with paredeptid= connect by prior deptid=paredeptid

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

  select a*level from personsdept a start with paredeptid= connect by prior deptid=paredeptid

  PSstart with 後面所跟的就是就是遞歸的種子也就是遞歸開始的地方

  connect by prior後面的字段順序是有講究的

  若prior缺省則只能查詢到符合條件的起始行並不進行遞歸查詢

  例

  select * from table

  start with org_id = HBHqfWGWPy

  connect by prior org_id = parent_id;

  簡單說來是將一個樹狀結構存儲在一張表裡比如一個表中存在兩個字段:

  org_idparent_id那麼通過表示每一條記錄的parent是誰就可以形成一個樹狀結構

  用上述語法的查詢可以取得這棵樹的所有記錄

  其中

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

  條件 是連接條件其中用PRIOR表示上一條記錄

  比如 CONNECT BY PRIOR org_id = parent_id就是說上一條記錄的org_id 是本條記錄的parent_id即本記錄的父親是上一條記錄

  條件 是過濾條件用於對返回的所有記錄進行過濾

  簡單介紹如下

  在掃描樹結構表時需要依此訪問樹結構的每個節點一個節點只能訪問一次其訪問的步驟如下

  第一步從根節點開始

  第二步訪問該節點

  第三步判斷該節點有無未被訪問的子節點若有則轉向它最左側的未被訪問的子節點並執行第二步否則執行第四步

  第四步若該節點為根節點則訪問完畢否則執行第五步

  第五步返回到該節點的父節點並執行第三步驟

  總之掃描整個樹結構的過程也即是中序遍歷樹的過程


From:http://tw.wingwit.com/Article/program/Oracle/201311/18399.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.