前面提到oracle中start with ...connect by 除了用来进行层次查询和得到序列之外,还看到了在Oracle中利用深度优先法则进行connect by 运算。9I之后还增加了sys_connect_by_path 函数。说实话,我一直对这两个用法不得要领,只好期待哪天脑袋被门夹了,说不定能豁然开朗……….
玩笑归玩笑,动手实践才是最重要。
ORACLE 10G,PLSQL DEVELOP,创建测试表,插入测试数据
create table test(parent_id varchar2(20),lower_id varchar2(20));
insert into test values('0','1');
insert into test values('0','2');
insert into test values('1','11');
insert into test values('1','12');
insert into test values('2','21');
insert into test values('2','22');
insert into test values('11','111');
insert into test values('11','112');
insert into test values('12','121');
insert into test values('12','122');
insert into test values('21','211');
insert into test values('21','212');
insert into test values('22','221');
insert into test values('22','222');
commit;
CONNECT BY :
SQL> select test.*,level from test start with parent_id='0' connect by prior lower_id=parent_id;
PARENT_ID LOWER_ID LEVEL
-------------------- -------------------- ----------
0 1 1
1 11 2
11 111 3
11 112 3
1 12 2
12 121 3
12 122 3
0 2 1
2 21 2
21 211 3
21 212 3
2 22 2
22 221 3
22 222 3
14 rows selected.
SQL>
SQL> select test.* from test start with lower_id='222' connect by prior parent_id=lower_id;
PARENT_ID LOWER_ID
-------------------- --------------------
22 222
2 22
0 2
SQL>
从这两种写法可以看出,分别从根向叶子节点遍历,和从叶子节点向根遍历,得到树的结果。LEVEL是connect by 树中的伪列,标识这个叶子是在树当中的第几层。
SYS_CONNECT_BY_PATH
用法:SYS_CONNECT_BY_PATH(colum,char)
SQL> col aa format a10
SQL> select sys_connect_by_path(lower_id,' ') aa,level from test start with parent_id='0' connect by prior lower_id=parent_id;
AA LEVEL
---------- ----------
1 1
1 11 2
1 11 111 3
1 11 112 3
1 12 2
1 12 121 3
1 12 122 3
2 1
2 21 2
2 21 211 3
2 21 212 3
2 22 2
2 22 221 3
2 22 222 3
14 rows selected.
Elapsed: 00:00:00.01
SQL>
转摘自:http://www.cnblogs.com/zeromyth/archive/2009/09/08/1562346.html
分享到:
相关推荐
本文将详细讲解如何利用`START WITH...CONNECT BY PRIOR`子句来构建和查询树形数据库表。 `START WITH...CONNECT BY PRIOR`是Oracle SQL中的一个特性,用于处理具有层级关系的数据。这个子句允许我们遍历和查询具有...
### Oracle Start With.Connect By Prior 子句实现递归查询 #### 概述 在Oracle数据库中,`Start With.Connect By Prior`子句是执行递归查询的一种强大工具,主要用于处理层次结构数据。这类数据通常存在于组织...
本文章详细介绍了Oracle中connect by...start with...的用法。
使用 START WITH 和 CONNECT BY 子句可以实现 SQL 的层次查询,并且可以使用 SYS_CONNECT_BY_PATH 函数和 CONNECT_BY_ROOT、CONNECT_BY_ISLEAF、CONNECT_BY_ISCYCLE 等伪列函数来增强层次查询的能力。
connect by:connect by是必须的,start with有些情况是可以省略的,或者直接start with 1=1不加限制 prior:prior关键字可以放在等号的前面,也可以放在等号的后面,表示的意义是不一样的,比如 prior id = pid,...
### Oracle数据库中的START WITH 和 CONNECT BY 用法详解 在Oracle数据库中,处理层次结构数据时,`START WITH` 和 `CONNECT BY` 是非常有用的两个关键字。这些关键字可以帮助我们在查询时构建出树形或者层级结构的...
[ WHERE condition ][ [ START WITH condition ] CONNECT BY condition [ ORDER SIBLINGS BY expression ] ] ``` 其中,`START WITH`子句用于指定查询的起始节点,`CONNECT BY`子句用于指定查询的递归条件。 ...
### Oracle中的START WITH CONNECT BY PRIOR 用法详解 #### 一、概念介绍 在Oracle数据库中,`START WITH` 和 `CONNECT BY PRIOR` 是两个非常强大的特性,主要用于处理具有层级结构的数据。这两个特性可以帮助我们...
Oracle 连接查询是指使用 START WITH 和 CONNECT BY 语句来实现递归查询的方法,这种方法可以生成树形结构的数据。在 Oracle 中,START WITH 语句用于指定递归查询的开始记录,而 CONNECT BY 语句用于指定递归查询的...
总的来说,`START WITH` 和 `CONNECT BY` 的组合使用能够有效地处理和展示具有层级关系的数据,它们允许我们以树状结构的形式获取数据,这对于理解和分析具有上下级关系的数据集非常有帮助。在实际应用中,这些查询...
#### 二、Connect By与Start With详解 1. **Connect By**:用于指定层级关系中的父节点与子节点之间的连接条件。例如,在一个员工表中,如果想要查找所有下属及其下属的下属,可以使用`CONNECT BY PRIOR employee_...
Successfully design and simulate your 3D robot model and use powerful robotics algorithms and tools to program and set up your robots with an unparalleled experience by using the exciting new features...
Oracle数据库中的`CONNECT BY PRIOR`是一个强大的查询构造器,用于处理树形数据结构,尤其在组织层级、部门结构或者员工管理系统中非常常见。这个功能允许我们从一个或多个根节点开始,按照指定的规则遍历整个树结构...
通过深入理解并熟练运用`CONNECT BY`,我们可以更高效地处理层级数据,提高数据库查询的灵活性和实用性。在实际工作中,结合具体的业务需求,适当调整查询策略,能够进一步优化性能。希望以上内容能帮助你更好地理解...
在Oracle数据库中,递归查询可以通过`START WITH CONNECT BY PRIOR`语句实现。此语句允许用户按照树状结构来检索数据。 ##### 1. `START WITH CONNECT BY PRIOR`用法详解 **基本语法**: ```sql SELECT * FROM ...
文章中给出了一个名为`t_test_connectby`的数据表例子,其中包含父子关系的节点数据。通过该表,我们可以更直观地了解Connect By的执行过程。 - 不指定起始条件时,使用`CONNECT BY`: ```sql SELECT * FROM t_test...
通常,`CONNECT BY`与`START WITH`一起使用,`START WITH`指定了层级遍历的起始节点。 例如,假设我们有一个员工表(EMPLOYEE),其中包含上级员工ID(MANAGER_ID)字段,我们可以使用以下查询来展示员工的管理层次...
树状结构查询主要依赖于`START WITH`和`CONNECT BY PRIOR`这两个关键语法。`START WITH`用于指定查询的起始节点,而`CONNECT BY PRIOR`则定义了节点之间的关系,从而实现对树状结构的遍历。 #### 示例:以KING为根...