Oracle10g中层次查询简介

php中文网
发布: 2016-06-07 15:15:37
原创
1033人浏览过

我们可以通过START WITH . . . CONNECT BY . . .子句来实现SQL的 层次查询,而Oracle 10g 为其添加许多了新的伪列。十多年以来,Oracle SQL 具有依照层次关系进行查询的 功能。例如,你可以指定一个起始条件,然后根据一个或多个连接条件来确定孩子行的内容

  我们可以通过START WITH . . . CONNECT BY . . .子句来实现SQL的 层次查询,而Oracle 10g 为其添加许多了新的伪列。十多年以来,Oracle SQL 具有依照层次关系进行查询的 功能。例如,你可以指定一个起始条件,然后根据一个或多个连接条件来确定孩子行的内容。举例来说,现在假设我有一个表,里面记录了世界上的某些地区,其表结构如下:

@@######@@

  那么我们可以使用START WITH . . . CONNECT BY . . .从句将父级地区与孩子地区连接起来,并将其层次等级显示出来。

@@######@@

自从Since Oracle 9i 开始,就可以通过 SYS_CONNECT_BY_PATH 函数实现将从父节点到当前行内容以“path”或者层次元素列表的形式显示出来。 如下例所示:

@@######@@
在 Oracle 10g 中,还有其他更多关于层次查询的新特性 。例如,有的时候用户更关心的是每个层次分支中等级最低的内容。那么你就可以利用伪列函数CONNECT_BY_ISLEAF来判断当前行是不是叶子。如果是叶子就会在伪列中显示“1”,如果不是叶子而是一个分支(例如当前内容是其他行的父亲)就显示“0”。下给出了一个关于这个函数使用的例子:
@@######@@@@######@@
create table hier<BR><BR>(<BR><BR>parent varchar2(30),<BR><BR>child varchar2(30)<BR><BR>);<BR><BR>insert into hier values(null,'Asia');<BR><BR>insert into hier values(null,'Australia');<BR><BR>insert into hier values(null,'Europe');<BR><BR>insert into hier values(null,'North America');<BR><BR>insert into hier values('Asia','China');<BR><BR>insert into hier values('Asia','Japan');<BR><BR>insert into hier values('Australia','New South Wales');<BR><BR>insert into hier values('New South Wales','Sydney');<BR><BR>insert into hier values('California','Redwood Shores');<BR><BR>insert into hier values('Canada','Ontario');<BR><BR>insert into hier values('China','Beijing');<BR><BR>insert into hier values('England','London');<BR><BR>insert into hier values('Europe','United Kingdom');<BR><BR>insert into hier values('Japan','Osaka');<BR><BR>insert into hier values('Japan','Tokyo');<BR><BR>insert into hier values('North America','Canada');<BR><BR>insert into hier values('North America','USA');<BR><BR>insert into hier values('Ontario','Ottawa');<BR><BR>insert into hier values('Ontario','Toronto');<BR><BR>insert into hier values('USA','California');<BR><BR>insert into hier values('United Kingdom','England'); 
登录后复制
column child format a40<BR><BR>select level,lpad(' ',level*3)||child child<BR><BR>from hier<BR><BR>start with parent is null<BR><BR>connect by prior child = parent;<BR><BR>LEVEL CHILD<BR><BR>---------- --------------------------<BR><BR>1 Asia<BR><BR>2 China<BR><BR>3 Beijing<BR><BR>2 Japan<BR><BR>3 Osaka<BR><BR>3 Tokyo<BR><BR>1 Australia<BR><BR>2 New South Wales<BR><BR>3 Sydney<BR><BR>1 Europe<BR><BR>2 United Kingdom<BR><BR>3 England<BR><BR>4 London<BR><BR>1 North America<BR><BR>2 Canada<BR><BR>3 Ontario<BR><BR>4 Ottawa<BR><BR>4 Toronto<BR><BR>2 USA<BR><BR>3 California<BR><BR>4 Redwood Shores
登录后复制
column path format a50<BR><BR>select level,sys_connect_by_path(child,'/') path<BR><BR>from hier<BR><BR>start with parent is null<BR><BR>connect by prior child = parent;<BR><BR>LEVEL PATH <BR><BR>-------- --------------------------------------------<BR><BR>1 /Asia<BR><BR>2 /Asia/China<BR><BR>3 /Asia/China/Beijing<BR><BR>2 /Asia/Japan<BR><BR>3 /Asia/Japan/Osaka<BR><BR>3 /Asia/Japan/Tokyo<BR><BR>1 /Australia<BR><BR>2 /Australia/New South Wales<BR><BR>3 /Australia/New South Wales/Sydney<BR><BR>1 /Europe<BR><BR>2 /Europe/United Kingdom<BR><BR>3 /Europe/United Kingdom/England<BR><BR>4 /Europe/United Kingdom/England/London<BR><BR>1 /North America<BR><BR>2 /North America/Canada<BR><BR>3 /North America/Canada/Ontario<BR><BR>4 /North America/Canada/Ontario/Ottawa<BR><BR>4 /North America/Canada/Ontario/Toronto<BR><BR>2 /North America/USA<BR><BR>3 /North America/USA/California<BR><BR>4 /North America/USA/California/Redwood Shores 
登录后复制
select connect_by_isleaf,sys_connect_by_path(child,'/') path<BR><BR>from hier<BR><BR>start with parent is null<BR><BR>connect by prior child = parent;<BR><BR>CONNECT_BY_ISLEAF PATH<BR><BR>---------------------------------- 
登录后复制
0 /Asia<BR><BR>0 /Asia/China<BR><BR>1 /Asia/China/Beijing<BR><BR>0 /Asia/Japan<BR><BR>1 /Asia/Japan/Osaka<BR><BR>1 /Asia/Japan/Tokyo<BR><BR>0 /Australia<BR><BR>0 /Australia/New South Wales<BR><BR>1 /Australia/New South Wales/Sydney<BR><BR>0 /Europe<BR><BR>0 /Europe/United Kingdom<BR><BR>0 /Europe/United Kingdom/England<BR><BR>1 /Europe/United Kingdom/England/London<BR><BR>0 /North America<BR><BR>0 /North America/Canada<BR><BR>0 /North America/Canada/Ontario<BR><BR>1 /North America/Canada/Ontario/Ottawa<BR><BR>1 /North America/Canada/Ontario/Toronto<BR><BR>0 /North America/USA<BR><BR>0 /North America/USA/California<BR><BR>1 /North America/USA/California/Redwood Shores 
登录后复制
最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号