Oracle树查询(startwithconnectbyprior)探究
oracle树查询的最重要的语法结构是:select…start with…connect by…prior,通过该查询可以将表中的关系以树的形式展示出来。
10多年的东坡网站建设经验,针对设计、前端、开发、售后、文案、推广等六对一服务,响应快,48小时及时工作处理。营销型网站建设的优势是能够根据用户设备显示端的尺寸不同,自动调整东坡建站的显示方式,使网站能够适用不同显示终端,在浏览器中调整网站的宽度,无论在任何一种浏览器上浏览网站,都能展现优雅布局与设计,从而大程度地提升浏览体验。成都创新互联公司从事“东坡网站设计”,“东坡网站推广”以来,每个客户项目都认真落实执行。
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
网页名称:Oracle树查询(startwithconnectbyprior)探究
文章源于:http://ybzwz.com/article/gpespd.html