您好,登錄后才能下訂單哦!
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
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。