connect by…start with...

 

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

1、從根節點開始

2、訪問該節點

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

4、若該節點爲根節點,則訪問完畢,否則執行第五步

5、返回到該節點的父節點,並執行第三步

 

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

 

 

Oracle中的SELECT語句可以用CONNECT BY...START WITH...子句實現遞歸查詢,CONNECT BY是結構

化查詢中用到的,其基本語法是:

SELECT * FROM tablename CONNECT BY {PRIOR 列名1=列名2|列名1=PRIOR 列名2} [START WITH]

 

CONNECT BY

說明每行數據將是按層次順序檢索,並規定將表中的數據連入樹型結構的關係中。

 

START WITH

這是可選的,用來標識哪個節點作爲查找樹型結構的根節點,可以有一個或多個根節點。若它被忽略,則表示所有滿足查詢條件的節點作爲根節點。

 

PRIOR

運算符“PRIOR”必須置於連接關係的兩列中某一個的前面。

對於節點間的父子關係,PRIOR運算符在一側表示父節點,在另一側表示子節點,從而確定查找樹結構的順序是自頂向下還是自底向上。

在連接關係中,除了可以使用列名外,還允許使用列表達式。

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

PRIOR被置於CONNECT BY子句中等號的後面時,則強制從葉節點到根節點的順序檢索,即由子節點向父節點方向通過樹結構,稱之爲自底向上方式。

 

自底向上:查找過程中只有樹中的一枝被顯示,這是因爲在樹型結構中每一個節點只允許有一個父節

點。其查找過程是從開始節點起,找到其父節點,再由其父節點向上找到父節點的父節點。這樣一直找到根節點爲止,結果就是樹中一枝的數據。

 

自頂向下:在自頂向下查找樹型結構,不但可以從根節點開始,還可以定義任何節點爲起始節點,以

些開始向下查找。這樣查找的結果就是以該節點爲開始節點的結構樹中的一枝。

 

在具有樹型結構的表中,每一行數據都是樹型結構中的一個節點。由於節點所處的層次位置不同,所

以每行記錄都可以有一個層號。層號根據節點與根節點的距離確定,不論從哪個節點開始,該起始根節點的層號始終爲1根節點的子節點爲2,依次類推。

 

在查詢中可以使用僞列LEVEL顯示每行數據的有關層次。LEVEL將返回樹型結構中當前節點的層次,我

們可以使用LEVEL來控制對樹型結構進行遍歷的深度。

 

可以使用WHERE來限定樹型結構中的單個節點,以去掉樹中的單個節點,但它卻不影響其後代節點

(自頂向下)或前輩節點(自底向上)。

如:SELECT * FROM tablename where 條件表達式 CONNECT BY… START WITH…

去掉樹型結構中的整個分枝(包括子節點或父節點)

如:SELECT * FROM tablename CONNECT BY 連接表達式 AND 條件表達式 START WITH…

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章