ORACLE分级查询

分级查询主要用于查询树形结构的记录。树形结构的数据存放在表中,数据之间的层次关系即父子关系,通过表中的列与列间的关系来描述。 

树形结构示例:

       查询雇员表中员工编号、姓名及员工负责人,结果如图1所示。从结果中可以发现,Hardy和Rory的负责人是John,John的负责人是Donald;Eric和Kary的负责人是Harky,Harky的负责人是Donald,最终可以形成一张树形结构图,如图2所示。


图1


图2

分级查询语法格式:

SELECT [LEVEL], COLUMN, ...
FROM   TABLE
[WHERE CONDITION(S)]
[START WITH CONDITION(S)]
[CONNECT BY PRIOR COLUMN1 = COLUMN2] ;

说明:
1.LEVEL代表层级。 在具有树结构的表中,每一行数据都是树结构中的一个节点,由于节点所处的层次位置不同,所以每行记录都可以有一个层号。层号根据节点与根节点的距离确定。不论从哪个节点开始,该起始根节点的层号始终为 1 ,根节点的子节点为 2 , 依此类推。

2.START WITH定义查找起始节点。在自顶向下查询树结构时,不但可以从根节点开始,还可以定义任何节点为起始节点,以此开始向下查找。这样查找的结果就是以该节点为开始的结构树的一枝。 不但可以指定一个根节点,还可以指定多个根节点。START WITH 子句为可选项,若该子句被省略,则表示所有满足查询条件的行作为根节点。

3.CONNECT BY 子句指定层次检索的顺序。 根据PRIORY 运算符放置在连接关系的位置,从而确定查找树结构是的顺序是自顶向下还是自底向上。CONNECT BY PRIOR PARENT KEY= CHILD KEY,表明顺序是自顶向下;CONNECT BY PRIOR CHILD KEY= PARENT KEY,表明顺序是自底向上。

分级查询(自顶向下)示例:

以员工编号是E005为根节点,自顶向下查询节点下所有的节点层级、员工编号、姓名及负责人编号,结果如图3所示。


图3


分级查询(自底向上)示例:

以员工编号是E002为根节点,自底向上查询节点所在分支所有的节点层级、员工编号、姓名及负责人编号,结果如图4所示。

图4

      对于分级查询的结果集节点的裁剪有两种方式,一种方式是在WHERE子句中指定过滤条件,另一种方式是在CONNECT BY子句中指定过滤条件。两种方式的区别是,WHERE子句中指定过滤条件,只能裁剪掉满足条件的节点,而CONNECT BY子句中指定过滤条件,不仅能够裁剪掉满足条件的节点,而且能裁剪掉满足条件节点所在的分支后的所有后代节点或前辈节点。


裁剪节点(WHERE子句):

 在WHERE子句中指定过滤条件,结果集中不仅删除了员工编号是E004的记录,而且删除了E004节点的后代节点E002、E003,结果如图5所示。


图5

裁剪节点(CONNECT  BY子句):

在WHERE子句中指定过滤条件,结果集中不仅删除了员工编号是E004的记录,而且删除了E004节点的后代节点E002、E003,结果如图6所示。


图6




  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值