`

用select 语句中的START WITH...CONNECT BY PRIOR子句实现递归查询

阅读更多

Finally, the next example adds a START WITH clause to specify a root row for the hierarchy, and an ORDER BY clause using the SIBLINGS keyword to preserve ordering within the hierarchy:

SELECT last_name, employee_id, manager_id, LEVEL
      FROM employees
      START WITH employee_id = 100
      CONNECT BY PRIOR employee_id = manager_id
      ORDER SIBLINGS BY last_name;


LAST_NAME                         EMPLOYEE_ID MANAGER_ID  LEVEL
-------------------------         ----------- ---------- ----------
King                              100                     1
Cambrault                         148        100          2
Bates                             172        148          3
Bloom                             169        148          3
Fox                               170        148          3
Kumar                             173        148          3
Ozer                              168        148          3
Smith                             171        148          3
De Haan                           102        100          2
Hunold                            103        102          3
Austin                            105        103          4
Ernst                             104        103          4
Lorentz                           107        103          4
Pataballa                         106        103          4
Errazuriz                         147        100          2
Ande                              166        147          3
Banda                             167        147          3

 

 

 语法:

在oracle中的select语句可以用START WITH...CONNECT BY PRIOR子句实现递归查询,connect by 
是结构化查询中用到的,其基本语法是: 
select ... from tablename 
start with cond1 
connect by cond2 
where cond3; 

简单说来是将一个树状结构存储在一张表里,比如一个表中存在两个字段: 
id,parentid那么通过表示每一条记录的parent是谁,就可以形成一个树状结构。 
用上述语法的查询可以取得这棵树的所有记录。 

其中:
COND1是根结点的限定语句,当然可以放宽限定条件,以取得多个根结点,实际就是多棵树。 
COND2是连接条件,其中用PRIOR表示上一条记录,比如 CONNECT BY PRIOR ID=PRAENTID就是说
上一条记录的ID是本条记录的PRAENTID,即本记录的父亲是上一条记录。 
COND3是过滤条件,用于对返回的所有记录进行过滤。 

Oracle 的树形查找语句connect by prior ... start with... 
Start with 后面跟的是开始结点即从什么位置开始查找。可以有多个起始结点 
Connect by  连接有父子关系的两个节点 id = parent_id 

怎么去遍历这棵树prior是关键,
如果prior 在parent_id 这一侧(id=prior parent_id)则说明向父节点查找即自底向上查找,
如果prior在id 这一侧(prior id= parent_id)则说明向子结点方向查找即自顶向下查找。 
遍历方式:先序遍历











分享到:
评论

相关推荐

    Oracle start with.connect by prior子句实现递归查询

    ### Oracle Start With.Connect By Prior 子句实现递归查询 #### 概述 在Oracle数据库中,`Start With.Connect By Prior`子句是执行递归查询的一种强大工具,主要用于处理层次结构数据。这类数据通常存在于组织...

    树状数据库表:Oracle中start with...connect by prior子句用法

    2. **CONNECT BY PRIOR子句**: `CONNECT BY PRIOR`子句定义了层次结构的连接规则。它使用`PRIOR`关键字来引用父节点,告诉Oracle如何通过一个字段(通常是表示父子关系的字段,如`PARENT_ID`)连接当前行和上一行...

    ORACLE查询树型关系(connect_by_prior_start_with)

    使用 START WITH 和 CONNECT BY 子句可以实现 SQL 的层次查询,并且可以使用 SYS_CONNECT_BY_PATH 函数和 CONNECT_BY_ROOT、CONNECT_BY_ISLEAF、CONNECT_BY_ISCYCLE 等伪列函数来增强层次查询的能力。

    Oracle_start_with_connect_by_prior_用法

    3. **过滤条件的影响**:`WHERE`子句是在已经通过`START WITH`和`CONNECT BY PRIOR`确定的记录集中进一步筛选,它不会影响到递归的路径。 #### 五、注意事项 - 在使用`START WITH`和`CONNECT BY PRIOR`时,需要确保...

    connect by的使用探索

    其中,`START WITH`子句用于指定查询的起始节点,`CONNECT BY`子句用于指定查询的递归条件。 Connect By的执行原理 Connect By语句的执行原理可以用以下程序来说明: ```sql for rec in (select * from some_table...

    connect_by_prior_递归算法

    ### Oracle中的Connect By Prior递归算法详解 #### 一、Connect By Prior 子句概述 在Oracle数据库中,`Connect By Prior`子句是一种非常有用的工具,尤其在处理具有层次结构的数据时。它允许用户以一种简洁的方式...

    10.2.0.3版本 with改造递归查询

    Oracle数据库支持通过`CONNECT BY`和`START WITH`子句实现递归查询。递归查询通常用于处理层次结构数据,如组织结构、文件系统等。 ##### 2. WITH子句 WITH子句是Oracle SQL中的一个特性,它允许用户定义一个临时...

    在ORACLE、MSSQL、MYSQL中树结构表递归查询的实现.pdf

    CONNECT BY子句通常配合START WITH子句使用,其中START WITH指定了递归的起点,而CONNECT BY用于定义父子关系。CONNECT BY子句中的PRIOR关键字用于表示层级之间的连接,它指向前一个步骤得到的列值。例如,如果当前...

    SQL语句 递归

    在Oracle中,递归查询主要通过`START WITH`和`CONNECT BY PRIOR`子句实现。 ### 二、递归查询的基本语法 递归查询的基本语法如下: ```sql SELECT column_name(s) FROM table_name START WITH condition CONNECT ...

    Oracle查询树形结构

    在 Oracle 中,查询树形结构可以使用 START WITH...CONNECT BY PRIOR 子句实现递归查询。其基本语法是: SELECT * FROM tablename START WITH cond1 CONNECT BY cond2 WHERE cond3; 其中,COND1 是根结点的限定...

    在db2和oracle中的对树的递归查询语句

    在这个例子中,`START WITH`语句定义了查询的起点,即根节点(ID为1的员工),`CONNECT BY`则指定了层次之间的连接条件(当前员工的ID等于其上级的ID)。 DB2虽然没有直接提供类似Oracle的`CONNECT_BY`功能,但可以...

    oracle递归、迭代

    在Oracle中实现递归查询需要用到`START WITH... CONNECT BY PRIOR`语法。 #### 三、递归查询的基本语法 递归查询的基本语法如下: ```sql SELECT column_name(s) FROM table_name START WITH start_condition ...

    oracle递归查询的例子

    本文将通过一个具体的例子来详细介绍如何在 Oracle 中实现递归查询。 #### 二、基础知识回顾 在深入讨论之前,我们需要先了解几个基础概念: 1. **START WITH 子句**:用于指定递归查询的起始条件。 2. **CONNECT ...

    oracle树结构查询.DOC

    Oracle数据库系统支持对树状结构数据的查询,这种查询方式主要通过`START WITH`和`CONNECT BY`子句实现。这两个子句是Oracle特有的,用于处理层级关系的数据,例如组织结构、产品分类或者树形菜单等。理解并掌握这两...

    SQL语句-递归查询、分组、统计.pdf

    在Oracle数据库中,可以使用`CONNECT BY`语句实现递归查询。例子中展示了如何通过`CONNECT BY`从`um_organization`表中查找特定`orgid`的上级和下级组织,以及生成整个组织结构树。`START WITH`指定递归的起始条件,...

    Oracle递归SQL学习

    通过理解`start with`、`connect by prior`和`order siblings by`的用法,我们可以有效地展示和操作层次数据。不过,实际应用时要注意性能优化,避免因递归深度过大而导致的问题,并考虑在模板渲染时的替代方案。

    oracle-tree-sql.rar_oracle

    在`CONNECT BY`语句中,`PRIOR`关键字用于引用当前行的父行。例如,如果`parent_id`是子节点指向父节点的字段,那么`PRIOR parent_id`就是父节点的`parent_id`。 二、树结构查询示例 2.1 查询所有层级的记录 一个...

    oracle prior

    在 SELECT 命令中使用 CONNECT BY 和 START WITH 子句可以查询表中的树型结构关系。其命令格式如下: ```sql SELECT 。。。 CONNECT BY {PRIOR 列名 1=列名 2|列名 1=PRIOR 列名 2} [START WITH]; ``` 其中,...

    oracle 使用递归的性能提示测试对比

    在给定的标题“oracle 使用递归的性能提示测试对比”和描述中,主要讨论了使用`START WITH...CONNECT BY NOCYCLE PRIOR`语句进行递归查询时的两种不同实现方式,以及它们对性能的影响。 首先,我们来理解这两种不同...

    Orcale查询树形结构

    Oracle中的select语句可以用START WITH…CONNECT BY PRIOR子句实现递归查询,connect by 是结构化查询中用到的,其基本语法是:  select * from tablename start with cond1  connect by cond2  where cond3; ...

Global site tag (gtag.js) - Google Analytics