oracle樹查詢的實現

2021-08-31 14:55:44 字數 1600 閱讀 9071

來自於網路:

oracle樹查詢又稱為遞迴查詢,是最常用的查詢方法之一,下文對oracle樹查詢作了詳細的闡述,希望可以讓您對oracle樹查詢有更深的認識。

oracle中的select語句可以用start with...connect by prior子句實現遞迴查詢,connect by 是結構化查詢中用到的,其基本語法是:

select * from tablename start with cond1

connect by cond2

where cond3;

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

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

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

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

cond2是連線條件,其中用prior表示上一條記錄,比如 connect by prior id=praentid就是說上一條記錄的id是本條記錄的

praentid,即本記錄的父親是上一條記錄。

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

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

deptid number 部門id

paredeptid number 父部門id(所屬部門id)

name char (40 byte) 部門名稱

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

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

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

通過根節點遍歷子節點.

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

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

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

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

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

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

oracle 遞迴查詢 樹查詢

通過根節點遍歷子節點.select level,a.deptproperty,a.from sys org a start with a.parentid 0 connect by prior a.org objid a.parentid 通過子節點獲取頂節點 select first value ...

oracle樹遞迴查詢

通過子節點向根節點追朔.deptid paredeptid name number number char 40 byte 部門id 父部門id 所屬部門id 部門名稱 sql 通過子節點遍歷根節點.select frompersons.deptstartwithdeptid 76connect b...

oracle 樹型查詢

1 start with 條件 connect by prior 記憶 prior 優先的 我理解為已知的.如常見的表中字段為id,pid 父類 其中有一條記錄為id 1000,pid 2000,那麼要找id的所有子類,必須去找 pid 1000的記錄,即id 1000必須是 優先的 是 已知的 故...