- 4
- 0
- 约1.47万字
- 约 9页
- 2016-10-05 发布于贵州
- 举报
关于oracl树状结构查询
关于oracle树状结构查询
关于oracle树状结构查询 1
一、基本概念: 1
1. 树结构的描述 1
2. 关于PRIOR 2
3. 定义查找起始节点 2
4.运用 LEVEL 2
5.节点和分支的裁剪 2
6.排序显示 3
二、实验与分析 3
1.先来看下基本用法: 3
2.我们再来关注一下排序(ORDER BY ORDER SIBLINGS BY)和伪列(LEVEL)的应用: 4
3.再来看这样一个案例: 5
三、一些心得总结 7
1.子句的语法书写顺序。 7
2.子句的执行顺序 8
3.如何理解和记忆“CONNECT BY PRIOR MGR = EMPNO ”的含义呢? 8
4.前序遍历 8
5.排序 8
6.伪列LEVEL 8
7.SYS_CONNECT_BY_PATH(COLUMN,CHAR) 9
Oracle树查询最重要的就是select...start with... connect by ...prior 语法了。依托于该语法,我们可以将一个表形结构的数据以树的顺序列出来。在下面列述了Oracle中树型查询的常用查询方式以及经常使用的与树查询相关的Oracle特性函数等。
一、基本概念:
1. 树结构的描述
树结构的数据存放在表中,数据之间的层次联系即父子联系,通过表中的列与列间的联系来描述, 如EMP表中的EMPNO和MGR。EMPNO示意该雇员的编号,MGR示意领导该雇员的人的编号,即子节点的MGR值等于父节点的EMPNO值。在表中的每一行中都有一个示意父节点的MGR(除根节点外),通过每个节点的父节点,就能够确定整个树结构。
在SELECT命令中运用 CONNECT BY 和START WITH 子句能够查询表中的树型结构联系。其命令格式如下:
SELECT 。。。
CONNECT BY {PRIOR 列名1=列名2列名1=PRIOR 列名2}
[START WITH];
其中:CONNECT BY子句表明每行数据将是按层次顺序检索,并规定将表中的数据连入树型结构的联系中。PRIOR运算符必须放置在连接联系的两列中某一个的前面。对于节点间的父子联系,PRIOR运算符在一侧示意父节点,在另一侧示意子节点,从而确定查找树结构是的顺序是自顶向下仍旧自底向上。在连接联系中,除了能够使用列名外,还准许运用列表达式。START WITH 子句为可选项,用来标识哪个节点作为查找树型结构的根节点。若该子句被省略,则示意所有满足查询条件的行作为根节点。START WITH:不但能够指定一个根节点,还能够指定多个根节点。
2. 关于PRIOR
运算符PRIOR被放置于等号前后的位置,决定着查询时的检索顺序。PRIOR被置于CONNECT BY子句中等号的前面时,则强制从根节点到叶节点的顺序检索,即由父节点向子节点方向议决树结构,咱们称之为自顶向下的方式。如:
CONNECT BY PRIOR EMPNO=MGR
PIROR运算符被置于CONNECT BY 子句中等号的后面时,则强制从叶节点到根节点的顺序检索,即由子节点向父节点方向议决树结构,咱们称之为自底向上的方式。比方:
CONNECT BY EMPNO=PRIOR MGR
在这种方式中也应指定一个开始的节点。
3. 定义查找起始节点
在自顶向下查询树结构时,不但能够从根节点开始,还能够定义任何节点为起始节点,以此开始向下查找。这样查找的结果就是以该节点为开始的结构树的一枝。
4.运用 LEVEL
在具有树结构的表中,每一行数据都是树结构中的一个节点,由于节点所处的层次位置不一样,所以每行记载都能够有一个层号。层号根据节点与根节点的距离确定。不论从哪个节点开始,该起始根节点的层号始终为1,根节点的子节点为2, 依此类推。
5.节点和分支的裁剪
在对树结构执行查询时,能够去掉表中的某些行,也能够剪掉树中的一个分支,运用 WHERE子句来限定树型结构中的单个节点,以去掉树中的单个节点,但它却不影响其后代节点(自顶向下检索时)或前辈节点(自底向顶检索时)。
6.排序显示
象在其它查询中一样,在树结构查询中也能够运用 ORDER BY 子句,改动查询结果的显示顺序,而不必按照遍历树结构的顺序。但需注意与ORDER SIBLINGS BY的区别应用。
二、实验与分析
1.先来看下基本用法:
有一个EMP表:
EMPNO NAME MGR
10 JACK 11
11 MARY 12
12 LUCY 15
13 DAN 15
14 TIM 11
15 DORA
这个表形成了一个树结构, MGR表示该用户的领导,
假如我们SQL这样写:
SELECT * FROM EMP CONNECT BY PRIOR EMPNO = MGR
原创力文档

文档评论(0)