




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、樹結(jié)構(gòu)查詢ORACLE是一個關(guān)系數(shù)據(jù)庫管理系統(tǒng),它用表的形式組織數(shù)據(jù),在某些表中的數(shù)據(jù)還呈現(xiàn)出 樹型結(jié)構(gòu)的聯(lián)系。例如,我們現(xiàn)在討論雇員信息表EMP,其中含有雇員編號(EMPNO)和 經(jīng)理(MGR)兩例,通過這兩列反映出來的就是雇員之間領(lǐng)導和被領(lǐng)導的關(guān)系。有些雇員 領(lǐng)導另一些雇員,有些雇員被領(lǐng)導,還有些雇員領(lǐng)導一些人又被別人領(lǐng)導,他們之間的這種 關(guān)系就是一種樹結(jié)構(gòu),圖1.1表示了 EMP表雇員間的這種樹結(jié)構(gòu)。MGR=7839EMPNO=9698MGR=7839MGR=7839EMPNO=7566MGR=7788MGR=7902ADAMSSMITHEMPNO=7876圖1.1 EMP表樹結(jié)構(gòu)圖EM
2、PNO=7369EMPNO=7782JONESBLAKECLARKMGR=7566MGR=7566MGR=7698MGR=7698MGR=7698MGR=7698MGR=7698MGR=7782SCOTTFORDALLENWARDMARTINTURNERJAMESMILLEREMPNO=7788 EMPNO=7902EMPNO=7499EMPNO=7521EMPNO=9654EMPNO=7844EMPNO=7900EMPNO=7934在這個樹結(jié)構(gòu)中,如果一個節(jié)點有直接的下屬節(jié)點(如圖中的JONES有礙SCOTT和 FORD),那么稱該節(jié)點是下屬節(jié)點的父節(jié)點,下屬節(jié)點為該節(jié)點的子節(jié)點。通過雇員的
3、 EMPNO和MGR可以看出他們之間的父子節(jié)點關(guān)系,父節(jié)點的EMPNO與子節(jié)點的MGR 相同。在樹結(jié)構(gòu)中,有且僅有一個節(jié)點無父節(jié)點,如圖中的KING,該節(jié)點被稱為根節(jié)點。 從圖上的標記可以看出,只有KING的MGR為空值。除根節(jié)點外,任何節(jié)點只有一個父節(jié) 點,有一個,多個或沒有子節(jié)點。早掃描樹結(jié)構(gòu)表時,需要依此訪問樹結(jié)構(gòu)的每個節(jié)點,一個節(jié)點只能訪問一次,其訪問的步 驟如下:第一步:從根節(jié)點開始;第二步:訪問該節(jié)點;第三步:判斷該節(jié)點有無未被訪問的子節(jié)點,若有,則轉(zhuǎn)向它最左側(cè)的未被訪問的子節(jié),并 執(zhí)行第二步,否則執(zhí)行第四步;第四步:若該節(jié)點為根節(jié)點,則訪問完畢,否則執(zhí)行第五步;第五步:返回到該節(jié)
4、點的父節(jié)點,并執(zhí)行第三步驟。總之:掃描整個樹結(jié)構(gòu)的過程也即是中序遍歷樹的過程。1.樹結(jié)構(gòu)的描述樹結(jié)構(gòu)的數(shù)據(jù)存放在表中,數(shù)據(jù)之間的層次關(guān)系即父子關(guān)系,通過表中的列與列間的關(guān)系來 描述,如EMP表中的EMPNO和MGR。EMPNO表示該雇員的編號,MGR表示領(lǐng)導該雇 員的人的編號,即子節(jié)點的MGR值等于父節(jié)點的EMPNO值。在表的每一行中都有一個表 示父節(jié)點的MGR (除根節(jié)點外),通過每個節(jié)點的父節(jié)點,就可以確定整個樹結(jié)構(gòu)。在SELECT命令中使用CONNECT BY和藹START WITH子句可以查詢表中的樹型結(jié)構(gòu)關(guān) 系。其命令格式如下:SELECT。CONNECT BY PRIOR 列名 1
5、=列名 21 列名 1=PRIOR 裂名 2START WITH;其中:CONNECT BY子句說明每行數(shù)據(jù)將是按層次順序檢索,并規(guī)定將表中的數(shù)據(jù)連入樹 型結(jié)構(gòu)的關(guān)系中。PRIORY運算符必須放置在連接關(guān)系的兩列中某一個的前面。對于節(jié)點間 的父子關(guān)系,PRIOR運算符在一側(cè)表示父節(jié)點,在另一側(cè)表示子節(jié)點,從而確定查找樹結(jié) 構(gòu)是的順序是自頂向下還是自底向上。在連接關(guān)系中,除了可以使用列名外,還允許使用列 表達式。START WITH子句為可選項,用來標識哪個節(jié)點作為查找樹型結(jié)構(gòu)的根節(jié)點。若 該子句被省略,則表示所有滿足查詢條件的行作為根節(jié)點。例1以樹結(jié)構(gòu)方式顯示EMP表的數(shù)據(jù)。SQL SELEC
6、T EMPNO,ENAME,MGRFROM EMPCONNECT BY PRIOR EMPNO=MGRSTART WITH ENAME=KING;EMPNOENAMEMGR7839KING7566JONES78397788SCOTT75667876ADAMS77887902FORD75667369SMITH79027698BLAKE78397499ALLEN76987521WARD76987654MARTIN76987844TURNER76987900JAMES76987782CLARK78397934MILLER778214 rows selected.2.關(guān)于 PRIOR運算符PRIOR被
7、放置于等號前后的位置,決定著查詢時的檢索順序。PRIOR被置于CONNECT BY子句中等號的前面時,則強制從根節(jié)點到葉節(jié)點的順序檢索, 即由父節(jié)點向子節(jié)點方向通過樹結(jié)構(gòu),我們稱之為自頂向下的方式。如:CONNECT BY PRIOR EMPNO=MGRPIROR運算符被置于CONNECT BY子句中等號的后面時,則強制從葉節(jié)點到根節(jié)點的順 序檢索,即由子節(jié)點向父節(jié)點方向通過樹結(jié)構(gòu),我們稱之為自底向上的方式。例如:CONNECT BY EMPNO=PRIOR MGR在這種方式中也應指定一個開始的節(jié)點。例2從SMITH節(jié)點開始自底向上查找EMP的樹結(jié)構(gòu)。SQLSELECT EMPNO,ENAME
8、,MGRFROM EMPCONNECT BY EMPNO=PRIOR MGRSTART WITH ENAME= SMITH;EMPNOENAMEMGR7369SMITH79027902FORD75667566JONES78397839 KING4 rows selected.在這種自底向上的查找過程中,只有樹中的一枝被顯示,這是因為,在樹結(jié)構(gòu)中每一個節(jié)點 只允許有一個父節(jié)點,其查找過程是從開始節(jié)點起,找到其父節(jié)點,再由其父節(jié)點向上,找 父節(jié)點的父節(jié)點。這樣一直找到根節(jié)點為止,結(jié)果就是樹中一枝的數(shù)據(jù)。備注:例2的另外一種寫法SELECT EMPNO,ENAME,MGRFROM EMPCONNEC
9、T BY PRIOR MGR=EMPNOSTART WITH ENAME= SMITH ;3.定義查找起始節(jié)點在自頂向下查詢樹結(jié)構(gòu)時,不但可以從根節(jié)點開始,還可以定義任何節(jié)點為起始節(jié) 點,以此開始向下查找。這樣查找的結(jié)果就是以該節(jié)點為開始的結(jié)構(gòu)樹的一枝。例3查找JONES直接或間接領(lǐng)導的所有雇員信息。SQLSELECT EMPNO,ENAME,MGRFROM EMPCONNECT BY PRIOR EMPNO=MGRSTART WITH ENAME= JONES;EMPNOENAMEMGR7566JONES78397788SCOTT75667876ADAMS77887902FORD756673
10、69SMITH79025 rows selected.START WITH不但可以指定一個根節(jié)點,還可以指定多個根節(jié)點。例4查找由FORD和BLAKE領(lǐng)導的所有雇員的信息。7844SQLSELECT EMPNO, ENAME, MGRFROM EMPCONNECT BY PRIOR EMPNO=MGRSTART WITH ENAME IN FORD,EMPNOENAME7698BLAKE78397499ALLEN76987521WARD76987654MARTIN7698TURNER76987900JAMES76987902FORD75667369SMITH7902BLAKE );8 rows
11、 selected.在自底向上查詢樹結(jié)構(gòu)時,也要指定一個開始節(jié)點,以此開始向上查找其父節(jié)點, 直至找到根節(jié)點,其結(jié)果將是結(jié)構(gòu)樹中的一枝數(shù)據(jù)。4.使用 LEVEL在具有樹結(jié)構(gòu)的表中,每一行數(shù)據(jù)都是樹結(jié)構(gòu)中的一個節(jié)點,由于節(jié)點所處的層次 位置不同,所以每行記錄都可以有一個層號。層號根據(jù)節(jié)點與根節(jié)點的距離確定。不論從哪 個節(jié)點開始,該起始根節(jié)點的層號始終為1,根節(jié)點的子節(jié)點為2,依此類推。圖1.2就表 示了樹結(jié)構(gòu)的層次。KINGJONESCLARK 23SCOTT FORDALLENJAMESADAMS4圖案1.2 EMP表樹結(jié)構(gòu)層次圖層號1BLAKEMILLERWARD MARTINTURNERS
12、MITH在查詢中,可以使用偽列LEVEL顯示每行數(shù)據(jù)的有關(guān)層次。LEVEL將返回樹型 結(jié)構(gòu)中當前節(jié)點的層次,我們可以使用LEVEL來控制對樹型結(jié)構(gòu)進行遍歷的深度。例5顯示EMP表中的各行數(shù)據(jù)及層號。SQLSELECT LEVEL,EMPNO,MGRFROM EMPCONNECT BY PRIOR EMPNO=MGRLEVELEMPNOENAME17839KING27566JONES783937788SCOTT756647876ADAMS778837902FORD756647369SMITH790227698BLAKE783937499ALLEN769837521WARD769837654MAR
13、TIN769837844TURNER769837900JAMES769827782CLARK783937934MILLER778214 rows selected.START WITH ENAME= KING;MGR偽列LEVEL為數(shù)值型,可以在SELECT命令中用語各種計算機。例6使用LEVEL改變查詢結(jié)果的顯示形式。SQLCOLUMN EMPLOYEE FORMAT A20SQL SELECT EMPNO,RPAD( ,LEVEL*3) |ENAME EMPLOYEE,MGRFROM EMPCONNECT BY PRIORY EMPNO=EMRSTART WITH ENAME=KING;M
14、GREMPNOEMPLOYEE7840KING7566JONES78397788SCOTT75667876ADAMS77887902FORD75667369SMITH79027698BLAKE78397499ALLEN76987521WARD76987654MARTIN76987844TURNER76987900JAMES76987782CLARK78397934MILLER778214 rows selected.在SELECT使用了函數(shù)RPAD,該函數(shù)表示以LEVEL*3個空格進行填充,由于不同行處于 不同的節(jié)點位置,具有不同的LEVEL值,因此填充的空格數(shù)將根據(jù)各自的層號確定,空格 再與
15、雇員名字拼接,結(jié)果顯示出這種層次關(guān)系,也就是說其雇員名字右側(cè)填充的空格數(shù)與它 的層數(shù)有關(guān)。5.節(jié)點和分支的裁剪在對樹結(jié)構(gòu)進行查詢時,可以去掉表中的某些行,也可以剪掉樹中的一個分支,使用WHERE 子句來限定樹型結(jié)構(gòu)中的單個節(jié)點,以去掉樹中的單個節(jié)點,但它卻不影響其后代節(jié)點(自 頂向下檢索時)或前輩節(jié)點(自底向頂檢索時)。SQLCOLUMN EMPLOYEE FORMAT A20SQL SELECT EMPNO,RPAD( ,LEVEL*3) |ENAME EMPLOYEE,MGRFROM EMPWHERE ENAME!=SCOTTCONNECT BY PRIORY EMPNO=EMRSTART
16、 WITH ENAME=KING;EMPNO7841756678767902736976987499752176547844790077827934EMPLOYEEMGRKINGJONES7839ADAMS7788FORD7566SMITH7902BLAKE7839ALLEN7698WARD7698MARTIN7698TURNER7698JAMES7698CLARK7839MILLER778213 rows selected.在這個查詢中,僅剪去了樹中單個節(jié)點SCOTT。若希望剪去樹結(jié)構(gòu)中的某個分支,則要用 CONNECT BY子句。CONNECT BY子句是限定樹型結(jié)構(gòu)中的整個分支,既要剪除
17、分支上 的單個節(jié)點,也要剪除其后代節(jié)點(自頂向下檢索時)或前輩節(jié)點(自底向頂檢索時)。例8.顯示KING領(lǐng)導下的全體雇員信息,除去SCOTT領(lǐng)導的一支。SQL SELECT EMPNO,RPAD( ,LEVEL*3) |ENAMi EMPLOYEE,MGRFROM EMPCONNECT BY PRIORY EMPNO=EMRAND ENAME!=SCOTTSTART WITH ENAME=KING;EMPNO7842756679027369769874997521EMPLOYEEMGRKINGJONES7839FORD7566SMITH7902BLAKE7839ALLEN7698WARD769
18、87654MARTIN76987844TURNER76987900JAMES769877827934CLARKMILLER7839778212 rows selected.這個查詢結(jié)果就與例7不同,除了剪去單個節(jié)點SCOTT外,還將SCOTT的子節(jié)點ADAMS 剪掉,即把SCOTT這個分支剪掉了。當然WHERE子句可以和CONNECT BY子句聯(lián)合使用,這樣能夠同時剪掉單個節(jié)點和樹中 的某個分支。例9.顯示KING領(lǐng)導全體雇員信息,除去雇員SCOTT,以及BLAKE領(lǐng)導的一支。SQLCOLUMN EMPLOYEE FORMAT A20SQL SELECT EMPNO,RPAD( ,LEVEL*3) |ENAME EMPLOYEE,MGRFROM EMPWHERE ENAME!=SCOTTCONNECT BY PRIORY EMPNO=EMREMPNOEMPLOYEEMGR7843KING7566JONES78397876ADAMS77887902FORD75667369SMITH79027782CLARK783979347 rows selected.6.排序顯示MILLER7782AND ENAME!=BLAKESTART WI
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年03月國家衛(wèi)生健康委醫(yī)院管理研究所招聘高校應屆畢業(yè)生2人筆試歷年專業(yè)考點(難、易錯點)附帶答案詳解
- 2025年02月濟南市萊蕪人民醫(yī)院公開招聘人員(控制總量)(30人)筆試歷年專業(yè)考點(難、易錯點)附帶答案詳解
- 軟式內(nèi)鏡培訓課件
- 風力運行知識培訓課件
- 榆林市第八幼兒園招聘考試真題2024
- 2025至2030廣域照明行業(yè)市場深度研究與戰(zhàn)略咨詢分析報告
- 2024年棗莊市山亭區(qū)青年招募筆試真題
- 2024年廣州市從化區(qū)教育局招聘事業(yè)單位編制教師筆試真題
- 東莞市的數(shù)學試卷
- 電中初二數(shù)學試卷
- 2025年安徽省中考數(shù)學試卷真題(含標準答案)
- T-GXAS 421-2022 成人急性中毒洗胃操作技術(shù)規(guī)范
- 光伏組件開路電壓測試記錄
- 應急預案演練記錄表范例
- 鐵程檢用表(共47頁)
- 霍尼韋爾DC中文說明書
- 2022小升初語文訓練真題試卷
- 抵押(質(zhì)押)物品清單
- 經(jīng)濟責任審計培訓課件(共46頁).ppt
- 施工升降機安裝監(jiān)理旁站記錄(范本)(共1頁)
- 馬克思主義學院工作匯報PPT課件
評論
0/150
提交評論