真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Oracle樹結(jié)構(gòu)

樹結(jié)構(gòu)層次關(guān)系即父子關(guān)系,類似公司中的部門組織結(jié)構(gòu)樹

成都創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價比橋西網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式橋西網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋橋西地區(qū)。費用合理售后完善,十多年實體公司更值得信賴。

Oracle樹結(jié)構(gòu)

其中總經(jīng)理是最大的父節(jié)點,下面有助理、市場部、行政辦、研發(fā)部等子節(jié)點,而研發(fā)部又細(xì)分為研發(fā)一部和研發(fā)二部;

如hr用戶表employees中的employee_id和manager_id。employee_id表示該雇員的編號,manager_id表示領(lǐng)導(dǎo)該雇員的人的編號,即子節(jié)點的manager_id值等于父節(jié)點的employee_id值。在表的每一行中都有一個表示父節(jié)點的manager_id(除根節(jié)點外),通過每個節(jié)點的父節(jié)點,就可以確定整個樹結(jié)構(gòu)。

在SELECT命令中使用CONNECT BY和藹START WITH子句可以查詢表中的樹型結(jié)構(gòu)關(guān)系。其命令格式如下:
SELECT。。。
CONNECT BY {PRIOR列名1=列名2|列名1=PRIOR裂名2}
[START 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)系中,除了可以使用列名外,還允許使用列表達(dá)式。

START WITH子句為可選項,用來標(biāo)識哪個節(jié)點作為查找樹型結(jié)構(gòu)的根(起始)節(jié)點。若該子句被省略,則表示所有滿足查詢條件的行作為根節(jié)點。
START WITH:不但可以指定一個根節(jié)點,還可以指定多個根節(jié)點。

 

學(xué)習(xí)之前,讓我們首先對于樹結(jié)構(gòu)章節(jié)會使用到的關(guān)鍵詞有個概念上的認(rèn)識和理解!

      prior:優(yōu)先的

      STARTWITH:指定遍歷的起點

     CONNECT BY PRIOR:指定遍歷的順序,比如從上到下,從下到上

     CONNECT BY NOCYCLE PRIOR:不進(jìn)行循環(huán)遍歷,可以避免死循環(huán)情況的發(fā)生

      SYS_CONNECT_BY_PRTH:函數(shù),用于指定層次分隔符

     CONNECT_BY_ISLEAF:函數(shù),返回0和1兩個值,0代表非末級節(jié)點,即下面還有子節(jié)點;1代表最末級節(jié)點,即下面不再有子節(jié)點

 

據(jù)上面的關(guān)鍵字我們來組合一條sql語句:顯示employees表中的用戶的隸屬關(guān)系,類似總經(jīng)理/副總經(jīng)理/行政辦主任/辦事員......

我們使用START WITH語句來指定遍歷的源頭,即從哪里開始,START WITH可以省略,如果省略則表示所有滿足查詢條件的行作為根節(jié)點

CONNECT BY PRIOR用來指定遍歷的順序,等號的兩端連接的是父子關(guān)系,即是從老子開始找兒子,還是從兒子開始找老子......

e.employee_id=e.manager_id的意思是:首先找到員工的信息,然后再去找上級是這個員工的,這就是從上至下

關(guān)于LEVEL:LEVEL需要與CONNECT BY配合使用,表示樹狀結(jié)構(gòu)的層級,LEVEL是Oracle保留關(guān)鍵字

--例1:下面的sql語句是上至下進(jìn)行員工遍歷顯示,層次結(jié)構(gòu)使用/進(jìn)行分割

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 領(lǐng)導(dǎo)的所有雇員的信息。

           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:樹結(jié)構(gòu)結(jié)果集中不包含Hartstein的樹狀關(guān)系,我們可以這樣實現(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關(guān)鍵字的方式進(jìn)行條件篩選


分享題目:Oracle樹結(jié)構(gòu)
標(biāo)題鏈接:http://weahome.cn/article/jpdecg.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部