Oracle start with connect by prior 用法(递归查询树形结构)

语法:

select * from  表名 where  条件1 start with 条件2 connect by prior 当前表字段=级联表字段。

start withconnect by prior语句完成递归记录,形成一棵树形结构,通常可以在具有层次结构的表中使用。

start with:表示开始的记录

connect by prior:指定与当前记录关联时的字段关系

 代码:--

创建部门表,这是一个具有层次结构的表,子记录通过parent_id与父记录的id进行关联

create table DEPT( 

ID NUMBER(9) PRIMARY KEY       --部门ID 

NAME VARCHAR2(100),             --部门名称

PARENT_ID NUMBER(9) --父级部门ID,通过此字段与上级部门关联

); 

向表中插入如下数据,为了使代码简单,一个部门仅具有一个下级部门

从根节点开始查询递归的记录

select * from dept  start with id=1 connect by prior id = parent_id; 

下面是查询结果,

start with id=1  表示从id=1的记录开始查询,向叶子的方向递归,递归条件是id=parent_id,当前记录的id等于子记录的parent_id 

●从叶子节点开始查询递归的记录

 select * from dept start with id=5 connect by prior parent_id = id; 

下面是查询结果,递归条件按照当前记录的parent_id等与父记录的id 

●对查询结果过滤

select * from dept where name like '%销售%' start with id=1 connect by prior id = parent_id;

在下面的查询结果中可以看到,首先使用start with... connect by prior查询出树形的结构,然后where条件才生效,对全部查询结果进行过滤

●prior的作用

 prior关键字表示不进行递归查询,仅查询出满足id=1的记录,下面是将第一个查询去掉prior关键字后结果

select * from dept start with id=1 connect by prior id = parent_id

注:select connect_by_root 列名  from 表名 where条件1 start with 条件2 connect by prior 当前表字段=级联表字段。

表示查找父级(父亲)的直系子级(儿子)

http://blog.csdn.net/u013492963/article/details/18551701

0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值