樹結構層次關系即父子關系,類似公司中的部門組織結構樹
成都創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設、高性價比橋西網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式橋西網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設找我們,業(yè)務覆蓋橋西地區(qū)。費用合理售后完善,十多年實體公司更值得信賴。
其中總經理是最大的父節(jié)點,下面有助理、市場部、行政辦、研發(fā)部等子節(jié)點,而研發(fā)部又細分為研發(fā)一部和研發(fā)二部;
如hr用戶表employees中的employee_id和manager_id。employee_id表示該雇員的編號,manager_id表示領導該雇員的人的編號,即子節(jié)點的manager_id值等于父節(jié)點的employee_id值。在表的每一行中都有一個表示父節(jié)點的manager_id(除根節(jié)點外),通過每個節(jié)點的父節(jié)點,就可以確定整個樹結構。
在SELECT命令中使用CONNECT BY和藹START WITH子句可以查詢表中的樹型結構關系。其命令格式如下:
SELECT。。。
CONNECT BY {PRIOR列名1=列名2|列名1=PRIOR裂名2}
[START WITH];
其中:CONNECT BY子句說明每行數(shù)據(jù)將是按層次順序檢索,并規(guī)定將表中的數(shù)據(jù)連入樹型結構的關系中。PRIORY運算符必須放置在連接關系的兩列中某一個的前面。對于節(jié)點間的父子關系,PRIOR運算符在的一側表示父節(jié)點,另一側表示子節(jié)點,從而確定查找樹結構是的順序是自頂向下還是自底向上。在連接關系中,除了可以使用列名外,還允許使用列表達式。
START WITH子句為可選項,用來標識哪個節(jié)點作為查找樹型結構的根(起始)節(jié)點。若該子句被省略,則表示所有滿足查詢條件的行作為根節(jié)點。
START WITH:不但可以指定一個根節(jié)點,還可以指定多個根節(jié)點。
學習之前,讓我們首先對于樹結構章節(jié)會使用到的關鍵詞有個概念上的認識和理解!
prior:優(yōu)先的
STARTWITH:指定遍歷的起點
CONNECT BY PRIOR:指定遍歷的順序,比如從上到下,從下到上
CONNECT BY NOCYCLE PRIOR:不進行循環(huán)遍歷,可以避免死循環(huán)情況的發(fā)生
SYS_CONNECT_BY_PRTH:函數(shù),用于指定層次分隔符
CONNECT_BY_ISLEAF:函數(shù),返回0和1兩個值,0代表非末級節(jié)點,即下面還有子節(jié)點;1代表最末級節(jié)點,即下面不再有子節(jié)點
據(jù)上面的關鍵字我們來組合一條sql語句:顯示employees表中的用戶的隸屬關系,類似總經理/副總經理/行政辦主任/辦事員......
我們使用START WITH語句來指定遍歷的源頭,即從哪里開始,START WITH可以省略,如果省略則表示所有滿足查詢條件的行作為根節(jié)點
CONNECT BY PRIOR用來指定遍歷的順序,等號的兩端連接的是父子關系,即是從老子開始找兒子,還是從兒子開始找老子......
e.employee_id=e.manager_id的意思是:首先找到員工的信息,然后再去找上級是這個員工的,這就是從上至下
關于LEVEL:LEVEL需要與CONNECT BY配合使用,表示樹狀結構的層級,LEVEL是Oracle保留關鍵字
--例1:下面的sql語句是上至下進行員工遍歷顯示,層次結構使用/進行分割
SQL>SELECTLPAD(' ', 2 * LEVEL - 1) || SYS_CONNECT_BY_PATH(e.last_name, '/') AS path
FROMemployees e
STARTWITH e.manager_id IS NULL
CONNECT BY PRIORe.employee_id = e.manager_id
--例2:查找由FORD和BLAKE 領導的所有雇員的信息。
SQL>SELECT EMPNO,ENAME,MGR
FROM EMP
CONNECT BY PRIOR EMPNO=MGR
START WITH ENAME IN(’FORD’,’BLAKE’);
EMPNO ENAME MGR
——————————————————————————
7698 BLAKE 7839
7499 ALLEN 7698
7521 WARD 7698
7654 MARTIN 7698
例3:樹結構結果集中不包含Hartstein的樹狀關系,我們可以這樣實現(xiàn)
SQL>SELECTLPAD(' ', 2 * LEVEL - 1) || SYS_CONNECT_BY_PATH(e.last_name, '/') AS path
FROM employees e
START WITHe.manager_id IS NULL
CONNECT BY PRIORe.employee_id = e.manager_id
AND e.last_name <> 'Hartstein'
說明:通過在CONNECT BY子句后面加AND關鍵字的方式進行條件篩選
當前名稱:Oracle樹結構
本文URL:http://jinyejixie.com/article26/jpdecg.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站設計、移動網(wǎng)站建設、虛擬主機、網(wǎng)站策劃、網(wǎng)站改版、動態(tài)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)