Oracle樹查詢(start with connect by prior)探究

來源:互聯網
上載者:User

標籤:樹查詢   connect   orancle   

oracle樹查詢的最重要的文法結構是:select…start with…connect by…prior,通過該查詢可以將表中的關係以樹的形式展示出來。

1、建立測試表及資料:

--建立測試表

CREATE TABLE YAG_TREE(

     T_ID NUMBER(10) NOT NULL, --id

     T_CONTEXT VARCHAR2(20),   --內容

     PARENTID NUMBER(10)       --父 id

);

--建立序列

CREATE SEQUENCE SEQ_YAG START WITH 1 MAXVALUE 100 INCREMENT BY 1 NOCYCLE CACHE 10;

--產生父節點資料

BEGIN

  FOR I IN 1..5 LOOP

    INSERT INTO YAG_TREE VALUES(SEQ_YAG.NEXTVAL,‘父節點‘||SEQ_YAG.CURRVAL,NULL);

    COMMIT;

  END LOOP;    

END;

--產生一級節點資料

BEGIN

  FOR I IN 1..15 LOOP

    IF I <=3 THEN 

      INSERT INTO YAG_TREE VALUES(SEQ_YAG.NEXTVAL,‘一級節點‘||SEQ_YAG.CURRVAL,1);

    ELSIF I<=6 THEN

      INSERT INTO YAG_TREE VALUES(SEQ_YAG.NEXTVAL,‘一級節點‘||SEQ_YAG.CURRVAL,2);

    ELSIF I<=9 THEN

      INSERT INTO YAG_TREE VALUES(SEQ_YAG.NEXTVAL,‘一級節點‘||SEQ_YAG.CURRVAL,3);

    ELSIF I<=12 THEN

      INSERT INTO YAG_TREE VALUES(SEQ_YAG.NEXTVAL,‘一級節點‘||SEQ_YAG.CURRVAL,4);

    ELSIF I<=15 THEN

      INSERT INTO YAG_TREE VALUES(SEQ_YAG.NEXTVAL,‘一級節點‘||SEQ_YAG.CURRVAL,5);

    COMMIT;

    END IF;

  END LOOP;    

END;

--產生二級節點資料

BEGIN

  FOR I IN 1..15 LOOP

    INSERT INTO YAG_TREE VALUES(SEQ_YAG.NEXTVAL,‘二級節點‘||SEQ_YAG.CURRVAL,SEQ_YAG.CURRVAL-15);

    COMMIT;

  END LOOP;    

END;

2、樹查詢應用:

--樹查詢1:查詢父節點id=1的下面所有子節點(即所有後代)

SELECT LEVEL /*樹的深度*/,SYS_CONNECT_BY_PATH(T_CONTEXT, ‘--->‘) /*樹的路徑*/,A.*

  FROM YAG_TREE A

 START WITH T_ID = 1

CONNECT BY PRIOR T_ID = PARENTID;


LEVEL       SYS_CONNECT_BY_PATH           T_ID         T_CONTEXT         PARENTID

-------- ----------------------------- ----------- -------------------- -----------

1        父節點                             11            父節點           1

2        父節點1--->一級節點                66           一級節點6         1

3        父節點1--->一級節點6--->二級節點21 21           二級節點21        6

2        父節點1--->一級節點7               7            一級節點7         1

3        父節點1--->一級節點7--->二級節點22 22           二級節點22        7

2        父節點1--->一級節點8               8            一級節點8         1

3        父節點1--->一級節點8--->二級節點23 23           二級節點23        8


--樹查詢2:查詢某個節點的所有父節點(即所有先代)

SELECT * FROM YAG_TREE START WITH T_ID=26 CONNECT BY PRIOR PARENTID=T_ID;


    T_ID      T_CONTEXT           PARENTID

----------- -------------------- -----------

       26    二級節點26                11

       11    一級節點11                2

       2     父節點2   


<-------待續-------->

學習資源:http://www.cnblogs.com/linjiqin/archive/2013/06/24/3152674.html

本文出自 “QYtag (Upspringing)” 部落格,請務必保留此出處http://qytag.blog.51cto.com/6125308/1530176

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.