ORACLE中树操作递归算法connect by prior
2017-04-24 10:34
363 查看
创建表 linshi_ljq
在其中插入数据
--父菜单
insert into linshi_ljq(value, value_meaning, parent_value_low) values(1, '父菜单1',null);
insert into linshi_ljq(value, value_meaning, parent_value_low) values(2, '父菜单2',null);
insert into linshi_ljq(value, value_meaning, parent_value_low) values(3, '父菜单3',null);
insert into linshi_ljq(value, value_meaning, parent_value_low) values(4, '父菜单4',null);
insert into linshi_ljq(value, value_meaning, parent_value_low) values(5, '父菜单5',null);
--一级菜单
insert into linshi_ljq(value, value_meaning, parent_value_low) values(6, '一级菜单6',1);
insert into linshi_ljq(value, value_meaning, parent_value_low) values(7, '一级菜单7',1);
insert into linshi_ljq(value, value_meaning, parent_value_low) values(8, '一级菜单8',1);
insert into linshi_ljq(value, value_meaning, parent_value_low) values(9, '一级菜单9',2);
insert into linshi_ljq(value, value_meaning, parent_value_low) values(10, '一级菜单10',2);
insert into linshi_ljq(value, value_meaning, parent_value_low) values(11, '一级菜单11',2);
insert into linshi_ljq(value, value_meaning, parent_value_low) values(12, '一级菜单12',3);
insert into linshi_ljq(value, value_meaning, parent_value_low) values(13, '一级菜单13',3);
insert into linshi_ljq(value, value_meaning, parent_value_low) values(14, '一级菜单14',3);
insert into linshi_ljq(value, value_meaning, parent_value_low) values(15, '一级菜单15',4);
insert into linshi_ljq(value, value_meaning, parent_value_low) values(16, '一级菜单16',4);
insert into linshi_ljq(value, value_meaning, parent_value_low) values(17, '一级菜单17',4);
insert into linshi_ljq(value, value_meaning, parent_value_low) values(18, '一级菜单18',5);
insert into linshi_ljq(value, value_meaning, parent_value_low) values(19, '一级菜单19',5);
insert into linshi_ljq(value, value_meaning, parent_value_low) values(20, '一级菜单20',5);
--二级菜单
insert into linshi_ljq(value, value_meaning, parent_value_low) values(21, '二级菜单21',6);
insert into linshi_ljq(value, value_meaning, parent_value_low) values(22, '二级菜单22',6);
insert into linshi_ljq(value, value_meaning, parent_value_low) values(23, '二级菜单23',7);
insert into linshi_ljq(value, value_meaning, parent_value_low) values(24, '二级菜单24',7);
insert into linshi_ljq(value, value_meaning, parent_value_low) values(25, '二级菜单25',8);
insert into linshi_ljq(value, value_meaning, parent_value_low) values(26, '二级菜单26',9);
insert into linshi_ljq(value, value_meaning, parent_value_low) values(27, '二级菜单27',10);
insert into linshi_ljq(value, value_meaning, parent_value_low) values(28, '二级菜单28',11);
insert into linshi_ljq(value, value_meaning, parent_value_low) values(29, '二级菜单29',12);
insert into linshi_ljq(value, value_meaning, parent_value_low) values(30, '二级菜单30',13);
insert into linshi_ljq(value, value_meaning, parent_value_low) values(31, '二级菜单31',14);
insert into linshi_ljq(value
4000
, value_meaning, parent_value_low) values(32, '二级菜单32',15);
insert into linshi_ljq(value, value_meaning, parent_value_low) values(33, '二级菜单33',16);
insert into linshi_ljq(value, value_meaning, parent_value_low) values(34, '二级菜单34',17);
insert into linshi_ljq(value, value_meaning, parent_value_low) values(35, '二级菜单35',18);
insert into linshi_ljq(value, value_meaning, parent_value_low) values(36, '二级菜单36',19);
insert into linshi_ljq(value, value_meaning, parent_value_low) values(37, '二级菜单37',20);
--三级菜单
insert into linshi_ljq(value, value_meaning, parent_value_low) values(38, '三级菜单38',21);
insert into linshi_ljq(value, value_meaning, parent_value_low) values(39, '三级菜单39',22);
insert into linshi_ljq(value, value_meaning, parent_value_low) values(40, '三级菜单40',23);
insert into linshi_ljq(value, value_meaning, parent_value_low) values(41, '三级菜单41',24);
insert into linshi_ljq(value, value_meaning, parent_value_low) values(42, '三级菜单42',25);
insert into linshi_ljq(value, value_meaning, parent_value_low) values(43, '三级菜单43',26);
insert into linshi_ljq(value, value_meaning, parent_value_low) values(44, '三级菜单44',27);
insert into linshi_ljq(value, value_meaning, parent_value_low) values(45, '三级菜单45',28);
insert into linshi_ljq(value, value_meaning, parent_value_low) values(46, '三级菜单46',28);
insert into linshi_ljq(value, value_meaning, parent_value_low) values(47, '三级菜单47',29);
insert into linshi_ljq(value, value_meaning, parent_value_low) values(48, '三级菜单48',30);
insert into linshi_ljq(value, value_meaning, parent_value_low) values(49, '三级菜单49',31);
insert into linshi_ljq(value, value_meaning, parent_value_low) values(50, '三级菜单50',31);
commit;
一、基本语法
select ... from <TableName>
where 条件1
start with 条件2
connect by prior 条件3
例如:select *
from linshi_ljq t
start with t.parent_value_low = '0'
connect by prior t.value = t.parent_value_low;
解析:prior表示上一条记录。比如说 connect by prior t.value = t.parent_value_low 就是说上一条记录的value值等于这条记录的parent_value_low的值,即本条记录的父亲是上一条记录。
prior运算符在父节点一侧还是在子节点一侧,决定了查找数结构的顺序是自定向下还是自底向上。
prior在子节点一侧表示自定向下,查询出的是所有的子类结果:
select *
from linshi_ljq t
start with t.parent_value_low = '0'
connect by prior t.value = t.parent_value_low;
prior 在父节点一侧表示自底向上,查询出的是所有的父类结果:
select *
from linshi_ljq t
start with t.parent_value_low = '2'
connect by prior t.parent_value_low = t.value
二、关键字
1)level 表示层级
例如:
select a.value,a.value_meaning,level
from linshi_ljq a
start with a.parent_value_low = '0'
connect by prior a.value = a.parent_value_low;
2) 列出全部的路径:SYS_CONNECT_BY_PATH
例如:select sys_connect_by_path(t.value_meaning, '/')
from linshi_ljq t
where t.value='50'
start with t.parent_value_low = '0'
connect by prior t.value = t.parent_value_low;
3)判断当前节点是否是叶子节点,如果是显示1,如果不是显示0:CONNECT_BY_ISLEAF
例如:
select connect_by_isleaf,b.*
from linshi_ljq b
start with b.parent_value_low = '0'
connect by prior b.value = b.parent_value_low
4)返回当前节点的根节点:CONNECT_BY_ROOT
例如:
select connect_by_root value_meaning, b.*
from linshi_ljq b
start with b.parent_value_low = '0'
connect by prior b.value = b.parent_value_low
在其中插入数据
--父菜单
insert into linshi_ljq(value, value_meaning, parent_value_low) values(1, '父菜单1',null);
insert into linshi_ljq(value, value_meaning, parent_value_low) values(2, '父菜单2',null);
insert into linshi_ljq(value, value_meaning, parent_value_low) values(3, '父菜单3',null);
insert into linshi_ljq(value, value_meaning, parent_value_low) values(4, '父菜单4',null);
insert into linshi_ljq(value, value_meaning, parent_value_low) values(5, '父菜单5',null);
--一级菜单
insert into linshi_ljq(value, value_meaning, parent_value_low) values(6, '一级菜单6',1);
insert into linshi_ljq(value, value_meaning, parent_value_low) values(7, '一级菜单7',1);
insert into linshi_ljq(value, value_meaning, parent_value_low) values(8, '一级菜单8',1);
insert into linshi_ljq(value, value_meaning, parent_value_low) values(9, '一级菜单9',2);
insert into linshi_ljq(value, value_meaning, parent_value_low) values(10, '一级菜单10',2);
insert into linshi_ljq(value, value_meaning, parent_value_low) values(11, '一级菜单11',2);
insert into linshi_ljq(value, value_meaning, parent_value_low) values(12, '一级菜单12',3);
insert into linshi_ljq(value, value_meaning, parent_value_low) values(13, '一级菜单13',3);
insert into linshi_ljq(value, value_meaning, parent_value_low) values(14, '一级菜单14',3);
insert into linshi_ljq(value, value_meaning, parent_value_low) values(15, '一级菜单15',4);
insert into linshi_ljq(value, value_meaning, parent_value_low) values(16, '一级菜单16',4);
insert into linshi_ljq(value, value_meaning, parent_value_low) values(17, '一级菜单17',4);
insert into linshi_ljq(value, value_meaning, parent_value_low) values(18, '一级菜单18',5);
insert into linshi_ljq(value, value_meaning, parent_value_low) values(19, '一级菜单19',5);
insert into linshi_ljq(value, value_meaning, parent_value_low) values(20, '一级菜单20',5);
--二级菜单
insert into linshi_ljq(value, value_meaning, parent_value_low) values(21, '二级菜单21',6);
insert into linshi_ljq(value, value_meaning, parent_value_low) values(22, '二级菜单22',6);
insert into linshi_ljq(value, value_meaning, parent_value_low) values(23, '二级菜单23',7);
insert into linshi_ljq(value, value_meaning, parent_value_low) values(24, '二级菜单24',7);
insert into linshi_ljq(value, value_meaning, parent_value_low) values(25, '二级菜单25',8);
insert into linshi_ljq(value, value_meaning, parent_value_low) values(26, '二级菜单26',9);
insert into linshi_ljq(value, value_meaning, parent_value_low) values(27, '二级菜单27',10);
insert into linshi_ljq(value, value_meaning, parent_value_low) values(28, '二级菜单28',11);
insert into linshi_ljq(value, value_meaning, parent_value_low) values(29, '二级菜单29',12);
insert into linshi_ljq(value, value_meaning, parent_value_low) values(30, '二级菜单30',13);
insert into linshi_ljq(value, value_meaning, parent_value_low) values(31, '二级菜单31',14);
insert into linshi_ljq(value
4000
, value_meaning, parent_value_low) values(32, '二级菜单32',15);
insert into linshi_ljq(value, value_meaning, parent_value_low) values(33, '二级菜单33',16);
insert into linshi_ljq(value, value_meaning, parent_value_low) values(34, '二级菜单34',17);
insert into linshi_ljq(value, value_meaning, parent_value_low) values(35, '二级菜单35',18);
insert into linshi_ljq(value, value_meaning, parent_value_low) values(36, '二级菜单36',19);
insert into linshi_ljq(value, value_meaning, parent_value_low) values(37, '二级菜单37',20);
--三级菜单
insert into linshi_ljq(value, value_meaning, parent_value_low) values(38, '三级菜单38',21);
insert into linshi_ljq(value, value_meaning, parent_value_low) values(39, '三级菜单39',22);
insert into linshi_ljq(value, value_meaning, parent_value_low) values(40, '三级菜单40',23);
insert into linshi_ljq(value, value_meaning, parent_value_low) values(41, '三级菜单41',24);
insert into linshi_ljq(value, value_meaning, parent_value_low) values(42, '三级菜单42',25);
insert into linshi_ljq(value, value_meaning, parent_value_low) values(43, '三级菜单43',26);
insert into linshi_ljq(value, value_meaning, parent_value_low) values(44, '三级菜单44',27);
insert into linshi_ljq(value, value_meaning, parent_value_low) values(45, '三级菜单45',28);
insert into linshi_ljq(value, value_meaning, parent_value_low) values(46, '三级菜单46',28);
insert into linshi_ljq(value, value_meaning, parent_value_low) values(47, '三级菜单47',29);
insert into linshi_ljq(value, value_meaning, parent_value_low) values(48, '三级菜单48',30);
insert into linshi_ljq(value, value_meaning, parent_value_low) values(49, '三级菜单49',31);
insert into linshi_ljq(value, value_meaning, parent_value_low) values(50, '三级菜单50',31);
commit;
一、基本语法
select ... from <TableName>
where 条件1
start with 条件2
connect by prior 条件3
例如:select *
from linshi_ljq t
start with t.parent_value_low = '0'
connect by prior t.value = t.parent_value_low;
解析:prior表示上一条记录。比如说 connect by prior t.value = t.parent_value_low 就是说上一条记录的value值等于这条记录的parent_value_low的值,即本条记录的父亲是上一条记录。
prior运算符在父节点一侧还是在子节点一侧,决定了查找数结构的顺序是自定向下还是自底向上。
prior在子节点一侧表示自定向下,查询出的是所有的子类结果:
select *
from linshi_ljq t
start with t.parent_value_low = '0'
connect by prior t.value = t.parent_value_low;
prior 在父节点一侧表示自底向上,查询出的是所有的父类结果:
select *
from linshi_ljq t
start with t.parent_value_low = '2'
connect by prior t.parent_value_low = t.value
二、关键字
1)level 表示层级
例如:
select a.value,a.value_meaning,level
from linshi_ljq a
start with a.parent_value_low = '0'
connect by prior a.value = a.parent_value_low;
2) 列出全部的路径:SYS_CONNECT_BY_PATH
例如:select sys_connect_by_path(t.value_meaning, '/')
from linshi_ljq t
where t.value='50'
start with t.parent_value_low = '0'
connect by prior t.value = t.parent_value_low;
3)判断当前节点是否是叶子节点,如果是显示1,如果不是显示0:CONNECT_BY_ISLEAF
例如:
select connect_by_isleaf,b.*
from linshi_ljq b
start with b.parent_value_low = '0'
connect by prior b.value = b.parent_value_low
4)返回当前节点的根节点:CONNECT_BY_ROOT
例如:
select connect_by_root value_meaning, b.*
from linshi_ljq b
start with b.parent_value_low = '0'
connect by prior b.value = b.parent_value_low
相关文章推荐
- oracle中 connect by prior 递归算法
- oracle中 connect by prior 递归算法
- oracle中 connect by prior 递归算法 -- 理解
- oracle中 connect by prior 递归算法
- Oracle 树操作(select...start with... connect by ...prior )
- oracle中 connect by prior 递归算法
- 【转】oracle中 connect by prior 递归算法 ---OCP--047--171
- oracle中 connect by prior 递归算法收藏
- oracle中 connect by prior 递归算法
- Oracle中 connect by prior 递归算法
- oracle中 connect by prior 递归算法
- oracle中 connect by prior 递归算法
- oracle 中 connect by prior 递归算法 -- 理解
- Oracle 树操作(select…start with…connect by…prior)
- oracle中 connect by prior 递归算法
- oracle中 connect by prior 递归算法 -- 理解
- oracle中的connect by prior ... start with 数据库的递归算法
- oracle中 connect by prior 递归算法
- oracle中 connect by prior 递归算法
- oracle中 connect by prior 递归算法 -- 理解