oracle中的層次結(jié)構(gòu)查詢

oracle中的層次結(jié)構(gòu)查詢

ID:36229275

大小:101.50 KB

頁(yè)數(shù):10頁(yè)

時(shí)間:2019-05-07

oracle中的層次結(jié)構(gòu)查詢_第1頁(yè)
oracle中的層次結(jié)構(gòu)查詢_第2頁(yè)
oracle中的層次結(jié)構(gòu)查詢_第3頁(yè)
oracle中的層次結(jié)構(gòu)查詢_第4頁(yè)
oracle中的層次結(jié)構(gòu)查詢_第5頁(yè)
資源描述:

《oracle中的層次結(jié)構(gòu)查詢》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫(kù)。

1、select*from(???selecttest.*,rownum?my_rownumfrom(??????selectidfromtestwhere1=1startwithid=1??????connectbypriorid=pid?orderbyid???)testwhererownum<3)wheremy_rownum>=1;?從Root往樹末梢遞歸select*fromTBL_TEST?startwithid=1?connectbypriorid=pid?從末梢往樹ROOT遞歸select*fromTBL_TEST?startwithid=5?connectbypriorp

2、id=id?ORACLE中的層次結(jié)構(gòu)查詢層次結(jié)構(gòu)在現(xiàn)實(shí)生活中是很常見的,因此早期的數(shù)據(jù)庫(kù)是層次數(shù)據(jù)庫(kù),如實(shí)的反映了這種關(guān)系。后來(lái)層次數(shù)據(jù)庫(kù)被證實(shí)是非常笨重的,因此關(guān)系數(shù)據(jù)庫(kù)取得了成功。但是層次結(jié)構(gòu)依然存在,而在關(guān)系數(shù)據(jù)庫(kù)中層次并不能得到很好的體現(xiàn)。ORACLE提供了強(qiáng)大的層次結(jié)構(gòu)查詢來(lái)解決這個(gè)問題。一、??固定和可變層數(shù)層次結(jié)構(gòu)關(guān)系大致可分為兩種。一種是層級(jí)固定,例如美國(guó)分為各個(gè)州,州下分縣,縣下又分鎮(zhèn)區(qū)和城市。這種情況如果在一張表中用遞歸來(lái)實(shí)現(xiàn)并不是很好的選擇,將其保存在主從結(jié)構(gòu)的三張表中更容易查詢和操作。另一種是層級(jí)可變。如圖所示的組件清單:??可構(gòu)造層次表如下:??二、??OR

3、ACLE的層次查詢ORACLE提供了SELECT查詢語(yǔ)句的STARTWITH和CONNECTBY子句,來(lái)實(shí)現(xiàn)層次查詢。要進(jìn)行層次查詢,必須明了兩件事情:識(shí)別根記錄的條件和子記錄中指向其父親的列名??次覀兊睦?,parent_assembly列決定該記錄的父親。由于根記錄Airplane沒有父親,因此列parent_assembly為空,而其他記錄的該列不為空,憑此可識(shí)別根記錄。兩個(gè)條件均已滿足,構(gòu)造查詢語(yǔ)句如下:SELECTassembly_id,assembly_name,parent_assemblyFROMbill_of_materialsSTARTWITHparent_ass

4、emblyISNULLCONNECTBYparent_assembly=PRIORassembly_id;三、??解析CONNECTBY子句從一定角度看,CONNECTBY可以看作是一種連接的規(guī)范。實(shí)現(xiàn)遞歸連接,也可以使用標(biāo)準(zhǔn)sql語(yǔ)句,將BILL_OF_MATERIAL與自身連接起來(lái)并返回每行的父記錄。SELECTbom1.assembly_id,bom1.assembly_name,bom2.assembly_idparentFROMbill_of_materialsbom1LEFTOUTERJOINbill_of_materialsbom2??ONbom1.parent_ass

5、embly=bom2.assembly_id;??這個(gè)sql語(yǔ)句返回的記錄和上面那個(gè)語(yǔ)句是同樣的。唯一的區(qū)別是行的順序不一樣。當(dāng)然行的順序是非常重要的,自連接的sql語(yǔ)句返回記錄的順序不能反映父子關(guān)系。很多問題并不能通過自連接解決,例如你不能使用自連接查詢選出剛好組成一架飛機(jī)的組件。但是CONNECTBY可以解決所有父子結(jié)構(gòu)方面的問題。四、??如何使用WHERE子句要過濾記錄,有兩種途徑。首先,從查詢的根節(jié)點(diǎn)方面著手,使用STARTWITH子句來(lái)限制查詢特定節(jié)點(diǎn)。例如我們可以使用如下語(yǔ)句,只查詢飛機(jī)上兩個(gè)座位及其部件的信息:SELECTassembly_id,assembly_nam

6、e,PRIORassembly_idparentFROMbill_of_materialsSTARTWITHassembly_idIN(205,206)CONNECTBYparent_assembly=PRIORassembly_id;但是有時(shí)需要其他條件,比如part_numberisnotnull,這時(shí)就需要引入WHERE子句。SELECTassembly_id,assembly_name,PRIORassembly_idparentFROMbill_of_materialsWHEREPART_NUMBERISNOTNULLSTARTWITHassembly_idIN(205,2

7、06)CONNECTBYparent_assembly=PRIORassembly_id;上面語(yǔ)句中的過濾條件是在CONNECTBY語(yǔ)句處理完成后才發(fā)生作用。當(dāng)樹已經(jīng)生成,過濾條件才開始影響查詢所返回的記錄。五、??層次連接要寫好層次查詢,必須了解ORACLE如何處理這樣的查詢。?????????首先實(shí)現(xiàn)連接?????????其次CONNECTBY處理應(yīng)用在連接所返回的記錄行上。?????????再次WHERE子句定義的過濾條件應(yīng)用在CONNECTBY操作

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無(wú)此問題,請(qǐng)放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫(kù)負(fù)責(zé)整理代發(fā)布。如果您對(duì)本文檔版權(quán)有爭(zhēng)議請(qǐng)及時(shí)聯(lián)系客服。
3. 下載前請(qǐng)仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動(dòng)等原因無(wú)法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶請(qǐng)聯(lián)系客服處理。