版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、5.層次查詢層次查詢(HieraricalRetrival)5.1基本概念基本概念對于層次查詢需要掌握:1.解釋層次查詢的基本概念,識別需求中需要用到層次查詢的能力。解釋層次查詢的基本概念,識別需求中需要用到層次查詢的能力。2.建立和格式化一個樹形報表建立和格式化一個樹形報表(treerept)。3.修剪樹形結構的節(jié)點修剪樹形結構的節(jié)點(node)和枝和枝(branches)。關鍵詞:關鍵詞:treeroot(根)nodeleaf(葉子
2、葉子)branch(樹枝,分支樹枝,分支)本節(jié)例子來源于表s_emp表結構和數(shù)據(jù)如下:看上面的表s_emp使用層次查詢,我們可以獲得一張表基于層次關系的數(shù)據(jù)集合。acle是一種關系型數(shù)據(jù)庫,在表中不可能以層次的關系存放數(shù)據(jù)。但是我們可以通過一定的規(guī)則,使用treewalking(樹的遍歷或樹的查找樹的遍歷或樹的查找)來獲得層次關系的數(shù)據(jù)。Hieraricalquery是一種獲得樹的層析關系報表的方法。樹形結構的數(shù)據(jù)集合,存在于我們日常生
3、活中的很多地方,比如考慮一個家族關系,有長輩,長輩下面有子女,子女下面還可以有子女,這轉化為層次或等級關系就是:根節(jié)點只有一個,下面有子節(jié)點,子節(jié)點下面還有子節(jié)點,這樣組成了一棵樹。(有時候,根節(jié)點有時候,根節(jié)點root不一定只有一個,不一定只有一個,嚴格意義上說,這種情況不是一個嚴格的樹嚴格意義上說,這種情況不是一個嚴格的樹)。當一種層次關系是存在一個表的行中,那么這種層次是可以獲得的。例如,我們看s_emp表,對于title:VP,
4、我們知道這些行中都包含manager_id=1也就是說,這些行屬于id=1的雇員的下屬雇員,那么有title=vp又可以獲得一系列的層次,而這些層次的跟則是id=1這個雇員。由此,得到一棵樹形結構數(shù)據(jù)集合。層次樹或等級樹,在譬如家族關系,育種關系,組織管理,產品裝配,人類進化,科學研究家族關系,育種關系,組織管理,產品裝配,人類進化,科學研究等領廣泛應用。下面我們就根據(jù)s_emp這張表,根據(jù)職位大小來描述一個樹形結構圖。如圖:5.con
5、nectbypri是指定父子關系,其中pri的位置不一定要在connectby之后,對于一個真實的層次關系,這也是必須的。對于對于from是視圖的,那么這個是視圖的,那么這個view不能包含不能包含join。5.2.2遍歷樹遍歷樹Startwith子句:子句:首先必須確定startpoint,通過startwith子句,后面加條件,這個條件是任何合法的條件表達式。Startwith確定將哪行作為root,如果沒有如果沒有startwit
6、h則每行都當作則每行都當作root,然后查找其,然后查找其后代后代,這不是一個真實的查詢。Startwith后面可以使用子查詢后面可以使用子查詢,如果有where條件,則會截斷層次中的相關滿足條件的節(jié)點,但是不影響整個層次結構??梢詭Ф鄠€條件??梢詭Ф鄠€條件。對于s_emp從roottitle=president開始,語句如下:levellevelididmanager_idmanager_idlast_namelast_nametit
7、letitlefromfroms_emps_empstartstartwithwithmanager_idmanager_idisisnullnullconnectconnectbybypripriidid=manager_idmanager_id這個語句與下面的語句等價,將startwith后面的條件換成子查詢。levellevelididmanager_idmanager_idlast_namelast_nametitletitle
8、fromfroms_emps_empstartstartwithwithtitletitle=(=(titletitlefromfroms_emps_empwherewheremanager_idmanager_idisisnullnull)connectconnectbybypripriidid=manager_idmanager_id注意:注意:startwith和connectbypri不是不是ANSI標準標準sql。Connec
9、tby子句:子句:Connectby與pri確定一個層次查詢的條件和遍歷的方向(pri確定)。Connectbypricolumn_1=column_2(其中其中pri表示前一個節(jié)點的意思,可以在表示前一個節(jié)點的意思,可以在connectby等號的前后,列之前,也可以放到等號的前后,列之前,也可以放到中的列之前中的列之前)。Connectby也可以帶多個條件,比如也可以帶多個條件,比如connectbypriid=manager_idi
10、d10方向:1.自頂向下遍歷自頂向下遍歷:就是先由根節(jié)點,然后遍歷子節(jié)點。column_1表示父keycolumn_2表示子key。即這種情況下:connectbypri父key=子key表示自表示自頂向下,等同于頂向下,等同于connectby子key=pri父key.例如:例如:levelidmanager_idlast_nametitlefroms_empstartwithmanager_id=2connectconnectbyb
11、yidid=priprimanager_idmanager_id自下而上遍歷自下而上遍歷2.自底向上遍歷自底向上遍歷:就是先由最底層的子節(jié)點,遍歷一直找到根節(jié)點。與上面的相反。Connectby之后不能有子查詢,但是可以加其他條件之后不能有子查詢,但是可以加其他條件比如加上比如加上id!=2等。這句話則會等。這句話則會截斷樹枝截斷樹枝,如果id=2的這個節(jié)點下面有很多子孫后代,則全部截斷不顯示。比如下面的句子:levelidmanage
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
評論
0/150
提交評論