`
tylgl
  • 浏览: 56798 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Oracle Start With Connect By

阅读更多
Start With Connect By  是用来实现在一个表中存在父子关系的两个字段的树形结构,通过一个从一个字段开始,以树形结构去查找其子记录。

1、建表

create table TEST_STRAT_WTH111
(
  OID       VARCHAR2(20),
  PARENT_ID VARCHAR2(20)
)

2、插入数据

insert into test_strat_wth (OID, PARENT_ID)
values ('0000005', '00');

insert into test_strat_wth (OID, PARENT_ID)
values ('0000003', '00');

insert into test_strat_wth (OID, PARENT_ID)
values ('0000004', '00');

insert into test_strat_wth (OID, PARENT_ID)
values ('000000500001', '0000005');

insert into test_strat_wth (OID, PARENT_ID)
values ('0000006', '00');

insert into test_strat_wth (OID, PARENT_ID)
values ('000000600001', '0000006');

insert into test_strat_wth (OID, PARENT_ID)
values ('000000600002', '0000006');

insert into test_strat_wth (OID, PARENT_ID)
values ('0000007', '00');

insert into test_strat_wth (OID, PARENT_ID)
values ('0000008', '00');

insert into test_strat_wth (OID, PARENT_ID)
values ('0000009', '00');

insert into test_strat_wth (OID, PARENT_ID)
values ('000000900001', '0000009');

insert into test_strat_wth (OID, PARENT_ID)
values ('000000900002', '0000009');

insert into test_strat_wth (OID, PARENT_ID)
values ('000000900003', '0000009');

insert into test_strat_wth (OID, PARENT_ID)
values ('000000900004', '0000009');

insert into test_strat_wth (OID, PARENT_ID)
values ('00', '');

insert into test_strat_wth (OID, PARENT_ID)
values ('01', '');

insert into test_strat_wth (OID, PARENT_ID)
values ('000000500002', '0000005');

insert into test_strat_wth (OID, PARENT_ID)
values ('000000500003', '0000005');

insert into test_strat_wth (OID, PARENT_ID)
values ('000000500004', '0000005');

insert into test_strat_wth (OID, PARENT_ID)
values ('0000011', '00');

insert into test_strat_wth (OID, PARENT_ID)
values ('0100004', '01');

insert into test_strat_wth (OID, PARENT_ID)
values ('0100005', '01');

insert into test_strat_wth (OID, PARENT_ID)
values ('010000500001', '0100005');

insert into test_strat_wth (OID, PARENT_ID)
values ('010000500002', '0100005');

insert into test_strat_wth (OID, PARENT_ID)
values ('0100006', '01');

insert into test_strat_wth (OID, PARENT_ID)
values ('010000600001', '0100006');

insert into test_strat_wth (OID, PARENT_ID)
values ('010000600002', '0100006');

insert into test_strat_wth (OID, PARENT_ID)
values ('0000010', '00');

insert into test_strat_wth (OID, PARENT_ID)
values ('000001000001', '0000010');

insert into test_strat_wth (OID, PARENT_ID)
values ('000001000005', '0000010');

insert into test_strat_wth (OID, PARENT_ID)
values ('000001000003', '0000010');

insert into test_strat_wth (OID, PARENT_ID)
values ('000001000004', '0000010');

insert into test_strat_wth (OID, PARENT_ID)
values ('0100007', '01');

insert into test_strat_wth (OID, PARENT_ID)
values ('0100008', '01');

insert into test_strat_wth (OID, PARENT_ID)
values ('0100010', '01');

insert into test_strat_wth (OID, PARENT_ID)
values ('0100009', '01');

COMMIT;

3、查询数据

SELECT *
  FROM TEST_STRAT_WTH T
START WITH T.PARENT_ID IS NULL
CONNECT BY PRIOR T.OID = T.PARENT_ID

4、数据结果:

00
0000005 00
000000500001 0000005
000000500002 0000005
000000500003 0000005
000000500004 0000005
0000003 00
0000004 00
0000006 00
000000600001 0000006
000000600002 0000006
0000007 00
0000008 00
0000009 00
000000900001 0000009
000000900002 0000009
000000900003 0000009
000000900004 0000009
0000011 00
0000010 00
000001000001 0000010
000001000005 0000010
000001000003 0000010
000001000004 0000010
01
0100004 01
0100005 01
010000500001 0100005
010000500002 0100005
0100006 01
010000600001 0100006
010000600002 0100006
0100007 01
0100008 01
0100010 01
分享到:
评论
1 楼 yvonxiao 2009-03-28  
这个的确好用,我记得我以前是自己写了个存储过程来解决这种递归问题的

相关推荐

    oracle数据库startwith用法

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

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

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

    MySQL多种递归查询方法.docx

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

    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子句用法

    `START WITH...CONNECT BY PRIOR`是Oracle SQL中的一个特性,用于处理具有层级关系的数据。这个子句允许我们遍历和查询具有父子关系的数据,例如部门和其下属子部门,或者员工和他们的上级经理。 1. **START WITH...

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

    connect by:connect by是必须的,start with有些情况是可以省略的,或者直接start with 1=1不加限制 prior:prior关键字可以放在等号的前面,也可以放在等号的后面,表示的意义是不一样的,比如 prior id = pid,...

    Oracle_start_with_connect_by_prior_用法

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

    Oracle中connect by...start with...的使用

    本文章详细介绍了Oracle中connect by...start with...的用法。

    Oracle的Connect By使用示例

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

    oracle connect by level 应用

    通常,`CONNECT BY`与`START WITH`一起使用,`START WITH`指定了层级遍历的起始节点。 例如,假设我们有一个员工表(EMPLOYEE),其中包含上级员工ID(MANAGER_ID)字段,我们可以使用以下查询来展示员工的管理层次...

    connect by的使用探索

    [ WHERE condition ][ [ START WITH condition ] CONNECT BY condition [ ORDER SIBLINGS BY expression ] ] ``` 其中,`START WITH`子句用于指定查询的起始节点,`CONNECT BY`子句用于指定查询的递归条件。 ...

    Oracle_start_with_connect_by_prior_用法[文].pdf

    Oracle 连接查询是指使用 START WITH 和 CONNECT BY 语句来实现递归查询的方法,这种方法可以生成树形结构的数据。在 Oracle 中,START WITH 语句用于指定递归查询的开始记录,而 CONNECT BY 语句用于指定递归查询的...

    start connect by

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

    浅谈Oracle下connect by原理.pdf

    文章中给出了一个名为`t_test_connectby`的数据表例子,其中包含父子关系的节点数据。通过该表,我们可以更直观地了解Connect By的执行过程。 - 不指定起始条件时,使用`CONNECT BY`: ```sql SELECT * FROM t_test...

    Oracle递归树形结构查询功能

    递归树形结构查询主要依赖于`CONNECT BY`和`PRIOR`关键字,它们允许我们构建复杂的层级查询,以展示数据的层次关系。 在Oracle中,树形结构查询的基本语法如下: ```sql SELECT [LEVEL], * FROM table_name START ...

    connect_by_prior_递归算法

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

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

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

    connect by prior数据库树的应用

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

    connect by的使用

    在Oracle数据库中,`CONNECT BY` 是一个非常重要的SQL语法,用于构建层次查询,它能够帮助我们处理具有层级关系的数据,比如组织结构、产品分类、树形菜单等。`CONNECT BY` 查询允许从一个表中抽取数据,并按照指定...

Global site tag (gtag.js) - Google Analytics