我们可以通过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”或者层次元素列表的形式显示出来。 如下例所示:
@@######@@ |
@@######@@@@######@@ |
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
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号