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所示。
![](/assets/blank.gif)
分级查询(自底向上)示例:
![](/assets/blank.gif)
对于分级查询的结果集节点的裁剪有两种方式,一种方式是在WHERE子句中指定过滤条件,另一种方式是在CONNECT BY子句中指定过滤条件。两种方式的区别是,WHERE子句中指定过滤条件,只能裁剪掉满足条件的节点,而CONNECT BY子句中指定过滤条件,不仅能够裁剪掉满足条件的节点,而且能裁剪掉满足条件节点所在的分支后的所有后代节点或前辈节点。
裁剪节点(WHERE子句):
在WHERE子句中指定过滤条件,结果集中不仅删除了员工编号是E004的记录,而且删除了E004节点的后代节点E002、E003,结果如图5所示。
![](/assets/blank.gif)
裁剪节点(CONNECT BY子句):
在WHERE子句中指定过滤条件,结果集中不仅删除了员工编号是E004的记录,而且删除了E004节点的后代节点E002、E003,结果如图6所示。
图6
ORACLE分级查询相关推荐
- Oracle 分级查询
树形结构的数据:MGR=EMPNO 树结构的数据存放在表中,数据之间的层次联系即父子联系,通过表中的列与列间的联系来描述,如EMP表中的EMPNO和MGR.EMPNO示意该雇员的编号,MGR示意领导该 ...
- oracle查询第三行,oracle层次化查询(行政区划三级级联)
oracle层次化查询(行政区划三级级联) 作者:小涵 | 来源:互联网 | 2018-07-15 10:38 阅读: 1975 现在将上面的行政区划按代码分为三个级别:省(后四位为0)市(后两位为0 ...
- Oracle高级查询之over(partition by...) 分组排序
Oracle高级查询之over(partition by...) 分组排序 一.rank()/dense_rank() over(partition by ...order by ...) 现在客户有 ...
- 查看oracle已经锁定的表,Oracle中查询被锁定的表
Oracle中查询被锁定的表 select --l.*,o.owner object_owner, o.object_Name,mac.status,mac.oSUSEr,mac.machine tr ...
- Oracle树查询总结
最近在做公司的项目中遇到一个问题,多级级联导航菜单,虽然只有三级目录,但<li>中嵌套<ul>,数据库表结构如下: CREATE TABLE FLFL ( ID NUMBER ...
- Oracle分页查询语句(六)
Oracle的分页查询语句基本上可以按照本文给出的格式来进行套用. Oracle分页查询语句(一):http://yangtingkun.itpub.net/post/468/100278 Oracl ...
- oracle 关联出现重复数据,ORACLE 分页查询出现重复记录的解决办法
今天在用Oracle分页查询数据的时候出现了重复数据,有的数据无法查出,很郁闷,想了想,找了资料,发现问题 分页语句: select * from ( select row_.*, rownum ro ...
- ORACLE 日期查询
Oracle 日期查询 1.查询当前日期 select sysdate from dual; 2.使用to_char来获取日期的部分参数YYYY 获取当前年 MM 获取 ...
- oracle json 搜索,oracle 正则查询json返回报文中某个字段的值
接口返回报文为json 格式,如下: {"body":{"businessinfo":{"c1rate":"25.00" ...
最新文章
- 大数据之Linux早课9.21
- git configuration
- jvm性能调优实战 - 26一个每秒10万并发的系统如何频繁发生Young GC的
- [云炬创业基础笔记]第二章创业者测试13
- Asp.Net中WebForm与MVC,Web API模式对比
- 分享Silverlight/WPF/Windows Phone一周学习导读(11月14日-11月20日)
- 技术交流论坛_天气预报|“第一届国家建筑工程与材料测试技术论坛”暨“第七届全国建筑材料测试技术”交流会...
- 【设计素材】表格数据形平面海报素材
- ES6新特性_Promise.prototype..then方法---JavaScript_ECMAScript_ES6-ES11新特性工作笔记027
- vue如何生成公钥私钥_百行Python代码演示1私钥生成多公链公钥原理。|区块链财富指北私钥篇(2)...
- C#也能PS图片,还能为网站Ajax上传图片同时生成微缩图(附Demo)
- remote Incorrect username or password ( access token)问题解决
- 高中电子技术——指针式万用表调零
- loki日志收集系统部署
- afuwin64教程_华硕主板BIOS降级强刷教程
- Transformer注意力
- 固态硬盘和机械硬盘区别 固态硬盘和机械硬盘的优缺点
- 金岩石:陈晓失误已铸成大错
- mysql开源内库_记一次内衣渗透测试
- 如何选择和阅读研究文献