`

oracle树中prior的用法

 
阅读更多

在oracle生成树时,prior起了至关重要的作用,它决定了书的遍历方向。下面用例子分别阐述之:


1、prior放在子节点方向

scott@ORA9I> l
1 SELECT substr(sys_connect_by_path(ENAME,'->'),3) EMPLOYEE
2 FROM EMP
3 CONNECT BY PRIOR EMPNO=MGR
4* START WITH ENAME='JONES'
scott@ORA9I> /

EMPLOYEE
------------------------------------------------------------
JONES
JONES->SCOTT
JONES->SCOTT->ADAMS
JONES->FORD
JONES->FORD->SMITH
--从上面可以看出,如果prior放在子节点方向,则oracle会根据start with指定的节点作为根节点,从上往下遍历基于指定节点的所有分支。它可能会对应多个分支。
--如果不指定start with,则oracle会把所有的节点都当成根节点分别往下遍历。

--用以下方法查看以JONES为根节点的所有完整的分支
scott@ORA9I> l
1 SELECT substr(sys_connect_by_path(ENAME,'->'),3) EMPLOYEE
2 FROM EMP
3 WHERE EMPNO NOT IN (SELECT MGR FROM EMP WHERE MGR IS NOT NULL)
4 CONNECT BY PRIOR EMPNO=MGR
5* START WITH ENAME='JONES'
scott@ORA9I> /

EMPLOYEE
------------------------------------------------------------
JONES->SCOTT->ADAMS
JONES->FORD->SMITH

2、prior放在父节点方向

scott@ORA9I> l
1 SELECT substr(sys_connect_by_path(ENAME,'->'),3) EMPLOYEE
2 FROM EMP
3 CONNECT BY PRIOR MGR=EMPNO
4* START WITH ENAME='JONES'
scott@ORA9I> /

EMPLOYEE
------------------------------------------------------------
JONES
JONES->KING
--从以上结果可以看出,当prior放在父节点端时,oracle会根据start with执行的节点作为子节点,从下往上找其对应的父节点,然后再根据找到的父节点找父节点的父节点,依此类推,直到找到根节点为止。
--我们也不难知道,这种情况下只可能有一个分支。

--用以下方法查看以JONES为最低层子节点的完整的分支
scott@ORA9I> l
1 SELECT substr(sys_connect_by_path(ENAME,'->'),3) EMPLOYEE
2 FROM EMP
3 WHERE MGR IS NULL
4 CONNECT BY PRIOR MGR=EMPNO
5* START WITH ENAME='JONES'
scott@ORA9I> /

EMPLOYEE
------------------------------------------------------------
JONES->KING



总结:
1)prior放在子节点端,则表示扫描树是以start with指定的节点作为根节点从上往下扫描。可能对应一个或多个分支。
start with可以省略,如果省略,表示对所有节点都当成根节点分别进行遍历
2)prior放在父节点端,则表示扫描树是以start with指定的节点作为最低层子节点,从下往上扫描。顺序是子节点往父节点扫描,直到根节点为止,这种情况只能得到一个分支。
start with可以省略,如果省略,表示对所有节点都当成最低层子节点分别往根节点方向遍历

一个不错的应用例子:http://blog.csdn.net/wqsmiling/archive/2005/06/14/394404.aspx

分享到:
评论

相关推荐

    Oracle_start_with_connect_by_prior_用法

    oracle中的数查询,介绍的详细,有例子。

    oracle prior

    不知道你用过这个东东没有,以前也是没使用过这个prior,感觉oracle的知识太少,所以根据我学习的经验总结给大家看它的作用以及他是怎么使用的,你可以自己比较一下自己遍历树的方法和这种方法的区别。

    oracle中connect-by-prior用法,实战解决日期分解问题.pdf

    。。。

    oracle中connect-by-prior用法,实战解决日期分解问题.docx

    。。。

    Oracle递归查询start with connect by prior的用法

    一、基本语法 connect by递归查询基本语法是: select 1 from 表格 start with … connect by...prior:prior关键字可以放在等号的前面,也可以放在等号的后面,表示的意义是不一样的,比如 prior id = pid,就表示p

    Oracle_start_with_connect_by_prior_用法[文].pdf

    Oracle_start_with_connect_by_prior_用法[文].pdf

    connect_by_prior_递归算法

    oracle中 connect by prior 递归算法 Oracle中start with...connect by prior子句用法 connect by 是结构化查询中用到的

    树状数据库表:Oracle中start with...connect by prior子句用法

    NULL 博文链接:https://yunqiang-zhang-hotmail-com.iteye.com/blog/1312354

    Oracle SQL树形结构查询

    本文介绍Oracle中使用START WITH...CONNECT BY PRIOR子句实现递归查询树形结构的方法,小伙伴们可以参考一下。

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    其一、就业面广:全球前100强企业99家都在使用ORACLE相关技术,中国政府机构,大中型企事业单位都能有ORACLE技术的工程师岗位。 其二、技术层次深:如果期望进入IT服务或者产品公司(类似毕博、DELL、IBM等),...

    MySQL多种递归查询方法.docx

    Oracle 递归查询, start with connect by prior 用法 find_in_set 函数 concat,concat_ws,group_concat 函数 MySQL 自定义函数 手动实现 MySQL 递归查询 Oracle 递归查询 在 Oracle 中是通过 start ...

    Oracle8i_9i数据库基础

    §15.4 在 PL/SQL 中使用 sqlcode,sqlerrm 273 第十六章 存储过程和函数 276 §16.1 引言 276 §16.2 存储过程 276 §16.2.1 创建过程 276 §16.2.2 使用过程 278 §16.2.3 开发存储过程步骤 279 §16.2.3.1 编辑...

    Oracle事例

    20.oracle8中扩充了group by rollup和cube的操作。有时候省了你好多功夫的。 下面的语句可以进行总计 select region_code,count(*) from aicbs.acc_woff_notify group by rollup(region_code); <2> 对第1个字段...

    Mysql树形递归查询的实现方法

    对于数据库中的树形结构数据,如部门表,有时候,我们需要知道某部门的所有下属部分或者某部分的所有上级部门,这时候就需要用到mysql的递归查询 最近在做项目迁移,Oracle版本的迁到Mysql版本,遇到有些oracle的...

    Oracle字段根据逗号分割查询数据的方法

    需求是表里的某个字段存储的值是以逗号分隔开来的,要求根据分隔的每一个值都能查出来数据,但是不能使用like查询。 数据是这样的: 查询的sql如下: select * from ( select guid, regexp_substr(st_responsible...

    SQL性能优化

    1 性能优化 1.1 避免频繁 commit,尤其...说明:除非是单据的单号,要求必须是唯一,并且依据流水号不可以跳号,不然在大量交易的表格中,不在乎跳耗时,要取得唯一的Primary Key 建议使用Oracle Sequence这样速度会较...

    ABAP/4 用户指南

    绝对经典的资料,所有语法用法都能查到 版权所有 (c) 1996 SAP AG 公司。保留 所有权利。 未经 SAP AG公司明 确许可,本 功能描述的 任何部分都 不得以任何 形式或以任 何目的进行 复制或传播 。若此处内 容变动,恕...

    SQL培训第一期

    1 SQL基础 1.1 基本概念 结构化查询语言(Structured Query ...select后面出现的列,如果没有使用集合函数,必须出现在group by 中。 select sno,sname,sum(grade) from student group by sno,sname; //合法写法 select...

    (3.0版本)自己写的struts2+hibernate+spring实例

    jar包:项目中除了使用了struts2,hibernate3.0和spring1.8以外(用spring2.0的包也可以.不能低于1.8的包.)还是用了junit,ajax,第三方的table组件.等等.所以需要下载相对应的包. 为了上传jar.我专门申请了一个网盘.所有...

Global site tag (gtag.js) - Google Analytics