`
jyangzi5
  • 浏览: 212247 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

start with...connect by prior

阅读更多

Oracle中start with...connect by prior

Start with...Connect By子句递归查询一般用于一个表维护树形结构的应用。

创建示例表:

CREATE TABLE TBL_TEST

(

  ID    NUMBER,

  NAME  VARCHAR2(100 BYTE),

  PID   NUMBER                                  DEFAULT 0

);

 

插入测试数据:

INSERT INTO TBL_TEST(ID,NAME,PID) VALUES('1','10','0');

INSERT INTO TBL_TEST(ID,NAME,PID) VALUES('2','11','1');

INSERT INTO TBL_TEST(ID,NAME,PID) VALUES('3','20','0');

INSERT INTO TBL_TEST(ID,NAME,PID) VALUES('4','12','1');

INSERT INTO TBL_TEST(ID,NAME,PID) VALUES('5','121','2');

 

从Root往树末梢递归

select * from TBL_TEST

 start with id=1

 connect by prior id = pid

 

从末梢往树ROOT递归

select * from TBL_TEST

 start with id=5

 connect by prior pid = id

 

======================================================================================

 

 connect by 是结构化查询中用到的,其基本语法是:
select ... from tablename start with 条件1
connect by 条件2
where 条件3;

例:

select * from table
start with org_id = 'HBHqfWGWPy'
connect by prior org_id = parent_id;

 

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

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

 

简单介绍如下:

早扫描树结构表时,需要依此访问树结构的每个节点,一个节点只能访问一次,其访问的步骤如下:
第一步:从根节点开始;
第二步:访问该节点;
第三步:判断该节点有无未被访问的子节点,若有,则转向它最左侧的未被访问的子节,并执行第二步,否则执行第四步;
第四步:若该节点为根节点,则访问完毕,否则执行第五步;
第五步:返回到该节点的父节点,并执行第三步骤。

总之:扫描整个树结构的过程也即是中序遍历树的过程。

分享到:
评论

相关推荐

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

    本文将详细讲解如何利用`START WITH...CONNECT BY PRIOR`子句来构建和查询树形数据库表。 `START WITH...CONNECT BY PRIOR`是Oracle SQL中的一个特性,用于处理具有层级关系的数据。这个子句允许我们遍历和查询具有...

    ORACLE查询树型关系(connect_by_prior_start_with)

    ORACLE 查询树型关系(connect_by_prior_start_with) Oracle 查询树型关系是指使用 START WITH 和 CONNECT BY 子句来实现 SQL 的层次查询。从 Oracle 9i 开始,可以通过 SYS_CONNECT_BY_PATH 函数实现将父节点到...

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

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

    Oracle递归查询start with connect by prior的用法

    select 1 from 表格 start with … connect by prior id = pId start with:表示以什么为根节点,不加限制可以写1=1,要以id为123的节点为根节点,就写为start with id =123 connect by:connect by是必须的,...

    Oracle_start_with_connect_by_prior_用法

    ### Oracle中的START WITH CONNECT BY PRIOR 用法详解 #### 一、概念介绍 在Oracle数据库中,`START WITH` 和 `CONNECT BY PRIOR` 是两个非常强大的特性,主要用于处理具有层级结构的数据。这两个特性可以帮助我们...

    Oracle_start_with_connect_by_prior_用法[文].pdf

    基本语法结构为:SELECT * FROM 表名 WHERE 条件 1 START WITH 条件 2 CONNECT BY PRIOR 当前表字段 = 级联表字段 其中,START WITH 语句指定了递归查询的开始记录,而 CONNECT BY 语句指定了递归查询的条件。 ...

    Oracle查询树形结构

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

    Oracle 实战SQL层次查询

    如果需要彻底删除一个节点及其所有子节点,则需要将过滤条件放在`CONNECT BY PRIOR`子句中: ```sql -- 过滤SCOTT用户,但SCOTT的下属ADAMS仍然显示 SELECT LEVEL, LPAD(' ', 2 * LEVEL - 1) || ename AS "Ename", ...

    oracle数据库startwith用法

    ### Oracle数据库中的START WITH 和 CONNECT BY 用法详解 在Oracle数据库中,处理层次结构数据时,`START WITH` 和 `CONNECT BY` 是非常有用的两个关键字。这些关键字可以帮助我们在查询时构建出树形或者层级结构的...

    connect by的使用探索

    [START WITH condition CONNECT BY PRIOR condition] [ WHERE condition ][ [ START WITH condition ] CONNECT BY condition [ ORDER SIBLINGS BY expression ] ] ``` 其中,`START WITH`子句用于指定查询的起始...

    oracle递归、迭代

    通过合理地定义`START WITH`和`CONNECT BY PRIOR`子句,可以方便地检索出任何复杂的层级结构数据。此外,结合`ORDER SIBLINGS BY`子句,还可以对查询结果进行排序,以满足不同场景的需求。希望本文能帮助读者更好地...

    connect by prior数据库树的应用

    ### Connect By Prior 数据库树的应用 #### 概述 在关系型数据库中,尤其是在 Oracle 数据库环境下,构建和查询层次结构数据是一项常见的需求。通过使用 `Connect By Prior` 存储过程,我们可以有效地处理这类问题...

    oracle中connect-by-prior用法,实战解决日期分解问题.docx

    Oracle数据库中的`CONNECT BY PRIOR`是一个强大的查询构造器,用于处理树形数据结构,尤其在组织层级、部门结构或者员工管理系统中非常常见。这个功能允许我们从一个或多个根节点开始,按照指定的规则遍历整个树结构...

    MySQL多种递归查询方法.docx

    在Oracle数据库中,递归查询可以通过`START WITH CONNECT BY PRIOR`语句实现。此语句允许用户按照树状结构来检索数据。 ##### 1. `START WITH CONNECT BY PRIOR`用法详解 **基本语法**: ```sql SELECT * FROM ...

    TN-HDB-0003-HANA SQL参考及Oracle对照-v0.6.docx

    - 在Oracle和HANA中,都可以使用`START WITH...CONNECT BY PRIOR`来执行递归查询,以构建树形结构的数据集。例如,查询具有父子关系的部门结构。两者在语法上基本一致,但HANA不支持Oracle中的`level`和`siblings`...

    一种MySQL数据库SQL递归查询的研究与实现.pdf

    CONNECT BY PRIOR`子句直接支持递归查询,而SQL Server 2005及以上版本则利用公共表表达式(CTE)的递归调用来实现。POSTgreSQL同样支持CTE子查询进行递归。这些数据库允许在SQL语句中直接对子查询进行递归调用,...

    Oracle的Connect By使用示例

    Oracle数据库通过提供`START WITH...CONNECT BY`语句来简化这类查询操作。此功能最早出现在Oracle 8.1.6版本,并一直沿用至今,成为处理递归查询的强大工具之一。 #### 二、Connect By与Start With详解 1. **...

    start connect by

    在SQL查询中,`START WITH` 和 `CONNECT BY` 是两个关键的子句,它们用于构建层次结构查询,通常在处理具有上下级关系的数据时非常有用,如员工与经理的关系、组织结构或者产品分类等。这两个子句是Oracle数据库特有...

    connect_by_prior_递归算法

    ### Oracle中的Connect By Prior递归算法详解 ...通过正确地设置`START WITH`、`CONNECT BY`和`WHERE`子句,可以有效地查询和分析复杂的数据结构。理解其工作原理有助于更好地利用Oracle的功能来满足各种业务需求。

Global site tag (gtag.js) - Google Analytics