文档章节

层次化查询

海贼爱音乐
 海贼爱音乐
发布于 2017/08/15 16:15
字数 400
阅读 44
收藏 0

层次化查询,即树型结构查询,是SQL中经常用到的功能之一,通常由根节点,父节点,子节点,叶节点组成。

SELECT [LEVEL] ,column,expression,...
FROM table_name
[WHERE where_clause]
[[START WITH start_condition] [CONNECT BY PRIOR prior_condition]];

CONNECT_BY_ISCYCLE:伪列,如果当前行有一个子行,且子行又是当前行的祖先行,CONNECT_BY_ISCYCLE返回1,否则返回0。只有在CONNECT BY从句中指定了NOCYCLE参数,才能指定CONNECT_BY_ISCYCLE。由于CONNECT BY存在循环数据,NOCYCLE能使Oracle返回查询结果,否则将查询失败。
CONNECT_BY_ISLEAF:伪列,如果当前行是CONNECT BY条件定义树的叶子节点,CONNECT_BY_ISLEAF伪列返回1,否则返回0。该信息也表明了一个给定的行是否可以进一步扩张,表现出更多的层次。
LEVEL:伪列,用于表示树的层次
start_condition:层次化查询的起始条件
prior_condition:定义父节点和子节点之间的关系,PRIOR指定父节点。作为运算符,PRIOR和加(+)减(-)运算的优先级相同。condition ... PRIOR expr = expr 或者 ... expr = PRIOR expr

例子使用Oracle的示例用户HR用户

SELECT EMPLOYEE_ID,FIRST_NAME,MANAGER_ID,DEPARTMENT_ID FROM EMPLOYEES;

图片说明

  1. 从根节点开始遍历
SELECT LEVEL,EMPLOYEE_ID,FIRST_NAME,MANAGER_ID,DEPARTMENT_ID FROM EMPLOYEES
START WITH EMPLOYEE_ID=100 CONNECT BY PRIOR EMPLOYEE_ID=MANAGER_ID;

输入图片说明
2. 从非根节点开始遍历

SELECT LEVEL,EMPLOYEE_ID,FIRST_NAME,MANAGER_ID,DEPARTMENT_ID FROM EMPLOYEES
START WITH FIRST_NAME='Lex' CONNECT BY PRIOR EMPLOYEE_ID=MANAGER_ID;

输入图片说明
3. 从下向上遍历树。交换父节点与子节点在CONNECT BY PRIOR子句中的顺序

SELECT LEVEL,EMPLOYEE_ID,FIRST_NAME,MANAGER_ID,DEPARTMENT_ID FROM EMPLOYEES
START WITH EMPLOYEE_ID=105 CONNECT BY PRIOR MANAGER_ID=EMPLOYEE_ID;

输入图片说明

这篇文章写的更清楚

© 著作权归作者所有

共有 人打赏支持
海贼爱音乐
粉丝 1
博文 87
码字总数 22611
作品 0
广州
CEO
ModeShape 简要

ModeShape 是一个分布式的,层次化的,事务的,一致的数据存储, 支持查询,全文检索, 事件, 版本化, 以及灵活的,动态模式. 它非常快, 可用性搞, 极易伸缩, 并且100%开源, 由Java开发. 客户端可以...

麦地兜兜
2012/12/01
1K
0
数据挖掘 自习笔记 第三章 定性归纳实践(上)

基于属性归纳的基本思想就是首先利用关系数据库查询来收集与任务相关的数据并通过对任务相关的数据并通过对任务相关数据集中各属性不同值个数的检查完成数据泛化操作。 下面是《数据挖掘导论...

urge104
2013/05/15
0
16
采用Tokyo Cabinet的一些问题

我们经常需要一些内存数据库,进行key-value的插入,查询,更新操作。需求基本上有几个层次 内存操作,方便使用 处理快,稳定性,占用内存多少等 持久化问题 在这里说说用过的一些Nosql。没有...

TrevorKuo
2015/09/02
42
0
pureXML的技术应用及展望

pureXML技术及混合型数据库的出现,超越了关系型数据库固有的局限性,为数据库的应用及开发开辟了新的领域。其意义不仅仅是提供了一种存储XML数 据的更有效的方式,可用于广泛使用XML数据的各...

红薯
2009/03/18
0
0
基于Hadoop生态圈的数据仓库实践 —— 进阶技术(六)

六、维度层次 大多数维度都具有一个或多个层次。例如,日期维度就有一个四级层次:年、季度、月和日。这些级别用date_dim表里的列来表示。日期维度是一个单路径层次,因为除了年-季度-月-日这...

wzy0623
2016/07/25
0
0

没有更多内容

加载失败,请刷新页面

加载更多

arts-week10

Algorithm 905. Sort Array By Parity - LeetCode Review Who’s Afraid of the Big Bad Preloader? 一文读懂前端缓存 一个网络请求3个步骤:请求,处理,响应,而前端缓存主要在请求处响应这两步...

yysue
今天
0
0
00.编译OpenJDK-8u40的整个过程

前言 历经2天的折腾总算把OpenJDK给编译成功了,要说为啥搞这个,还得从面试说起,最近出去面试经常被问到JVM的相关东西,总感觉自己以前学的太浅薄,所以回来就打算深入学习,目标把《深入理...

凌晨一点
今天
5
0
python: 一些关于元组的碎碎念

初始化元组的时候,尤其是元组里面只有一个元素的时候,会出现一些很蛋疼的情况: def checkContentAndType(obj): print(obj) print(type(obj))if __name__=="__main__": tu...

Oh_really
昨天
6
2
jvm crash分析工具

介绍一款非常好用的jvm crash分析工具,当jvm挂掉时,会产生hs_err_pid.log。里面记录了jvm当时的运行状态以及错误信息,但是内容量比较庞大,不好分析。所以我们要借助工具来帮我们。 Cras...

xpbob
昨天
130
0
Qt编写自定义控件属性设计器

以前做.NET开发中,.NET直接就集成了属性设计器,VS不愧是宇宙第一IDE,你能够想到的都给你封装好了,用起来不要太爽!因为项目需要自从全面转Qt开发已经6年有余,在工业控制领域,有一些应用...

飞扬青云
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部