600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > ORACLE递归_ 树形遍历查询根节点 父节点 子节点_002

ORACLE递归_ 树形遍历查询根节点 父节点 子节点_002

时间:2024-05-06 15:39:22

相关推荐

ORACLE递归_ 树形遍历查询根节点 父节点 子节点_002

ORACLE递归_ 树形遍历查询根节点、父节点、子节点_002

1、准备演示数据

创建表结构:

-- Create tablecreate table Z_ORG( cid NUMBER, cname VARCHAR2(32), parent_id NUMBER, create_time DATE, org_level NUMBER);-- Add comments to the tablecomment on table Z_ORG is'机构组织简化表';-- Add comments to the columnscomment on column Z_ORG.cid is'主键ID';comment on column ame is'组织名称';comment on column Z_ORG.parent_id is'上级组织ID';comment on column Z_ORG.create_time is'创建时间';comment on column _level is'组织级别';

录入数据:

insert into z_org(cid,cname,parent_id,create_time,org_level) select 1,'地球',0,sysdate,1 from dual;insert into z_org(cid,cname,parent_id,create_time,org_level) select 2,'中国',1,sysdate,2 from dual;insert into z_org(cid,cname,parent_id,create_time,org_level) select 3,'上海直辖市',2,sysdate,3 from dual;insert into z_org(cid,cname,parent_id,create_time,org_level) select 4,'江苏省',2,sysdate,3 from dual;insert into z_org(cid,cname,parent_id,create_time,org_level) select 5,'南京市',4,sysdate,4 from dual;insert into z_org(cid,cname,parent_id,create_time,org_level) select 6,'苏州市',4,sysdate,4 from dual;insert into z_org(cid,cname,parent_id,create_time,org_level)select 7,'无锡市',4,sysdate,4 from dual;insert into z_org(cid,cname,parent_id,create_time,org_level) select 8,'虹口区',3,sysdate,4 from dual;insert into z_org(cid,cname,parent_id,create_time,org_level) select 9,'浙江省',2,sysdate,3 from dual;insert into z_org(cid,cname,parent_id,create_time,org_level) select 10,'杭州市',9,sysdate,4 from dual;insert into z_org(cid,cname,parent_id,create_time,org_level) select 11,'宁波市',9,sysdate,4 from dual;insert into z_org(cid,cname,parent_id,create_time,org_level) select 12,'美国',1,sysdate,2 from dual;insert into z_org(cid,cname,parent_id,create_time,org_level) select 13,'加利福尼亚州',12,sysdate,3 from dual;insert into z_org(cid,cname,parent_id,create_time,org_level) select 14,'旧金山市',13,sysdate,4 from dual;insert into z_org(cid,cname,parent_id,create_time,org_level)select 15,'撒门市',13,sysdate,4 from dual;commit;

2、遍历根节点

1. select code1 from tablename 2. start with code2 3. connect by code3 4. where code4

code2是根结点的限定语句,当然可以放宽限定条件,以取得多个根结点,实际就是多棵树。

code3是连接条件,其中用prior表示上一条记录,比如connect by prior id=parentid就是说上一条记录的id是本条记录的parent,即本记录的父亲是上一条记录。

code4是过滤条件,用于对返回的所有记录进行过滤。

prior和start with关键字是可选项:

prior运算符必须放置在连接关系的两列中某一个的前面。**对于节点间的父子关系,prior运算符在一侧表示父节点,在另一侧表示子节点,从而确定查找树结构是的顺序是自顶向下还是自底向上。**在连接关系中,除了可以使用列名外,还允许使用列表达式。start with子句为可选项,用来标识哪个节点作为查找树型结构的根节点。若该子句被省略,则表示所有满足查询条件的行作为根节点。

遍历表,求得某一个节点的所有上级节点记录,比如求得撒门市的上级组织,应该获得加利福尼亚州,美国,地球这些记录,如下所示:

遍历求得根路径字符串:

3、遍历子节点

5. select code1 from tablename 6. start with code2 7. connect by code3 8. where code4

code2是根结点的限定语句,当然可以放宽限定条件,以取得多个根结点,实际就是多棵树。

code3是连接条件,其中用prior表示上一条记录,比如connect by prior id=parentid就是说上一条记录的id是本条记录的parent,即本记录的父亲是上一条记录。

code4是过滤条件,用于对返回的所有记录进行过滤。

prior和start with关键字是可选项:

prior运算符必须放置在连接关系的两列中某一个的前面。对于节点间的父子关系,prior运算符在一侧表示父节点,在另一侧表示子节点,从而确定查找树结构是的顺序是自顶向下还是自底向上。在连接关系中,除了可以使用列名外,还允许使用列表达式。

start with子句为可选项,用来标识哪个节点作为查找树型结构的根节点。若该子句被省略,则表示所有满足查询条件的行作为根节点。

如下所示,prior偏向父节点,就往下查询,查询节点下面所有的子节点记录:

如下所示,prior偏向子节点,就往下查询,查询节点下面所有的子节点记录:

–从parentid到cid开始递归,并以parentid为主展示这条记录

select t1.parentid, t1.cid, levelfrom test_category t1start with t1.parentid = 1connect by prior t1.parentid = t1.cid;

–从parentid到cid开始递归,并以parentid为主展示这条记录

select t1.parentid, t1.cid, levelfrom test_category t1start with t1.cid = 1connect by prior t1.parentid = t1.cid;

–从parentid到cid开始递归,并以cid为主展示这条记录

select t1.cid, t1.parentid, levelfrom test_category t1start with t1.parentid = 1connect by t1.parentid = prior t1.cid;

–从parentid到cid开始递归,并以cid为主展示这条记录

select t1.cid, t1.parentid, levelfrom test_category t1start with t1.cid = 1connect by t1.parentid = prior t1.cid;

转载地址:

/mchdba/article/details/52490664

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。