文档章节

oracle中用START WITH...CONNECT BY PRIOR子句实现递归查询

zhengjunbo
 zhengjunbo
发布于 2013/06/04 17:13
字数 497
阅读 90
收藏 12
今天发现在oracle中的select语句可以用START WITH...CONNECT BY PRIOR子句实现递归查询,connect by 是结构化查询中用到的,其基本语法是: 

select ... from tablename start with cond1 
connect by cond2 
where cond3; 

简单说来是将一个树状结构存储在一张表里,比如一个表中存在两个字段: 
id,parentid那么通过表示每一条记录的parent是谁,就可以形成一个树状结构。 

用上述语法的查询可以取得这棵树的所有记录。 

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

COND2是连接条件,其中用PRIOR表示上一条记录,比如 CONNECT BY PRIOR ID=PRAENTID就是说上一条记录的ID是本条记录的PRAENTID,即本记录的父亲是上一条记录。 
COND3是过滤条件,用于对返回的所有记录进行过滤。 

对于oracle进行简单树查询(递归查询) 
DEPTID PAREDEPTID NAME 
NUMBER NUMBER CHAR (40 Byte) 
部门id 父部门id(所属部门id) 部门名称 

通过子节点向根节点追朔. 

select * from persons.dept start with deptid=76 connect by prior paredeptid=deptid

通过根节点遍历子节点. 

select * from persons.dept start with paredeptid=0 connect by prior deptid=paredeptid
   可通过level 关键字查询所在层次.

select a.*,level from persons.dept a start with paredeptid=0 connect by prior deptid=paredeptid

再次复习一下:start with ...connect by 的用法, start with 后面所跟的就是就是递归的种子。 

递归的种子也就是递归开始的地方 connect by 后面的"prior" 如果缺省:则只能查询到符合条件的起始行,并不进行递归查询; 

connect by prior 后面所放的字段是有关系的,它指明了查询的方向。 

select FIRST_VALUE(deptid) OVER (ORDER BY LEVEL DESC ROWS UNBOUNDED PRECEDING) AS firstdeptid from persons.dept start with deptid=76 connect by prior paredeptid=deptid


本文转载自:http://qingfeng825.iteye.com/blog/197099

zhengjunbo
粉丝 1
博文 29
码字总数 10871
作品 0
广州
私信 提问
级联查询(Hierarchical Queries) 进阶应用:伪列LeveL

一、使用伪列Level显示表中节点的层次关系: Oracle9i对级联查询的支持不仅在于提供了像Start with...Connectby这样的子句供我们很方便地执行查询,而且还提供了一个伪列(Pseudocolumn):Leve...

雨中人X
2015/12/03
50
0
Oracle中start with...connect by子句的用法

Oracle中start with...connect by子句的用法Oracle中start with…connect by prior子句用法 connect by 是结构化查询中用到的,其基本语法是:select … from tablenamestart with 条件1conn...

什么是程序员
2016/11/11
17
0
oracle递归查询

今天发现在oracle中的select语句可以用START WITH...CONNECT BY PRIOR子句实现递归查询,connect by 是结构化查询中用到的,其基本语法是: select ... from tablename start with cond1 con...

紫枫咖啡
2014/05/12
0
0
oracle树状查询-connect by

connect by 是结构化查询中用到的,其基本语法是:   select ... from tablename start with 条件1   connect by 条件2   where 条件3;   例:   select from table   start wit...

hiqj
2016/03/01
224
0
ORACLE 树型层次结构查询

ORACLE中的SELECT语句可以用 START WITH...CONNECT BY PRIOR 子句实现递归查询,CONNECT BY 是结构化查询中用到的. 官方说明: http://docs.oracle.com/cd/B28359_01/server.111/b28286/queri...

i33
2014/04/30
1K
0

没有更多内容

加载失败,请刷新页面

加载更多

Leetcode PHP题解--D118 350. Intersection of Two Arrays II

D118 350. Intersection of Two Arrays II 题目链接 350. Intersection of Two Arrays II 题目分析 返回给定两个数组的交集。 思路 从数量较多的那个数组开始去另一个数组寻找是否元素存在,...

skys215
19分钟前
3
0
从源码上分析Android View保存数据状态

在Android开发旅途中,经常会遇到系统控件无法满足我们的视觉,交互效果,这个时候我们常常需要自己自定义控件来满足我们的需求。在这个开发探索过程中,我们不可避免得遇到View要保存状态信...

shzwork
20分钟前
3
0
请问AD603AQ和AD603AR有什么区别?

  AD603AQ和AD603AR只是在封装上的区别,前者是双列直插式,后者是贴片式,AD603A系列的温度都是在—40摄氏度到+85摄氏度之间,AD603还有一个系列是AD603S,它的温度是在—55摄氏度到+125摄...

仙溪
21分钟前
4
0
Linux /etc/profile 配置文件修改

1. 执行命令: vi /etc/profile 去类似windows 配置环境变量, 2.修改完,立即生效命令: source /etc/profile

kuchawyz
22分钟前
4
0
对于小白来说素描怎么入门?怎么学习?

素描初学者怎样入门?初学者怎样才能画好素描绘画?画好素描绘画有哪些技巧?想必这些问题都是绘画初学者们比较伤脑筋的问题,那么初学者到底怎样才能画好素描绘画呢?今天收集整理了关于素描...

huihuajiaocheng
23分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部