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

对oracle进行树结构(递归查询)

阅读更多

在ORACLE数据库查询中,我们经常会遇到对树型结构表的查询,这是个麻烦的问题。下面给大家介绍一种SQL语句,实现递归查询

 

Select * from …. Where [结果过滤条件语句]

Start with [and起始条件过滤语句]

Connect by prior [and中间记录过滤条件语句]

一、Start with.........Connect By 子句


        START WITH specifies the root row(s) of the hierarchy.

         CONNECT BY specifies the relationship between parent rows and child rows of the hierarchy. In a hierarchical query, one expression in condition must be qualified with the PRIOR operator to refer to the parent row。

二、示例

1.          创建测试表:


CREATE TABLE DG_Test
(
D_ID    NUMBER, D_NAME VARCHAR2(100 BYTE), D_PID   NUMBER , D_Enabled NUMBER )


2.          插入测试数据:

INSERT NTO dg_test(D_ID,D_NAME,D_PID,D_ENABLED) VALUES(1,'10',0,1);
INSERT INTO dg_test(D_ID,D_NAME,D_PID,D_ENABLED) VALUES(2,'11',1,1);
INSERT INTO dg_test(D_ID,D_NAME,D_PID,D_ENABLED) VALUES(3,'20',0,1);
INSERT INTO dg_test(D_ID,D_NAME,D_PID,D_ENABLED) VALUES(4,'12',1,1);
INSERT INTO dg_test(D_ID,D_NAME,D_PID,D_ENABLED) VALUES(5,'121',2,1);
INSERT INTO dg_test(D_ID,D_NAME,D_PID,D_ENABLED) VALUES(6,'1215',5,0);
INSERT INTO dg_test(D_ID,D_NAME,D_PID,D_ENABLED) VALUES(7,'1214',4,0);


3.      select * from DG_Test

4.      上述单表情况一般用于维护树型结构的应用

从Root往树末梢递归

select * from dg_test
start with D_id=1
connect by prior D_id = D_pid

从末梢往树ROOT递归

select * from dg_test
start with D_id=7
connect by D_id = prior D_pid

start with 后面跟着树根,定义了树开始显示的起点位置,如上面两种查询,不管从树根到树顶,还是从树顶到树根。

5.      排除单一体及其分支

select t.* from dg_test t
start with D_id=1
connect by prior D_id = D_pid
and d_id != 2

这个语句表示从D_id为2的开始,包括后面的子分支,全部排除

注意:这里和where条件的过虑方式不一样,where条件只是把相应的某条不符合要求的记录排除。

分享到:
评论

相关推荐

    Oracle递归树形结构查询功能

    oracle树状结构查询即层次递归查询,是sql语句经常用到的,在实际开发中组织结构实现及其层次化实现功能也是经常遇到的。这篇文章给大家介绍了Oracle递归树形结构查询功能,需要的朋友参考下

    递归查询菜单树,支持mysql,oracle

    递归查询菜单树,支持mysql,oracle,含表结构,递归查询菜单,支持mysql,oracle,含表结构递归查询菜单。

    Oracle中的树状查询(递归查询)

    Oracle中的树状查询(递归查询),权限查询,树形结构

    oracle递归、迭代

    Oracle使用递归查询。查询树结构的sql。在Oracle中,递归查询要用到start with ……connect by prior……

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

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

    递归查询父子关系记录 oracle

    oracle 如何递归查询父子关系。经常用于构造树结构

    oracle菜单树查询

    oracle菜单树查询 使用实例 使用START WITH CONNECT BY PRIOR子句实现递归查询

    Oracle递归查询

    有的情况下,我们需要用递归的方法整理数据,这才程序中很容易做到,但是在数据库 ...下面我以最典型的树形结构来说明下如何在Oracle使用递归查 询。 为了说明方便,创建一张数据库表,用于存储一个简单的树形结构

    Oracle通过递归查询父子兄弟节点方法示例

    主要给大家介绍了关于Oracle如何通过递归查询父子兄弟节点的相关资料,递归查询对各位程序员来说应该都不陌生,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧。

    Mysql树形递归查询的实现方法

    对于数据库中的树形结构数据,如部门表,有时候,我们需要知道某部门的所有下属部分或者某部分的所有上级部门,这时候就需要用到mysql的递归查询 最近在做项目迁移,Oracle版本的迁到Mysql版本,遇到有些oracle的...

    Oracle SQL树形结构查询

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

    PostgreSQL树形结构的递归查询示例

    在不引入MPTT模型的前提下,必须通过递归算法来查询某个节点和下级子节点。 Oracle提供的connect by扩展语法,简单好用。但是其他的RDBMS就没这么人性化了(或者我不知道)。最近在项目中使用PostgreSQL来查询树形...

    Oracle的递归

    Startwith...ConnectBy子句递归查询一般用于一个表维护树形结构的应用。 创建示例表:CREATETABLETBL_TEST(IDNUMBER,NAMEVARCHAR2(100BYTE),PIDNUMBERDEFAULT0);插入测试数据:INSERTINTOTBL_TEST(I

    Orcale查询树形结构

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

    精通SQL 结构化查询语言详解

    《精通SQ:结构化查询语言详解》全面讲解SQL语言,提供317个典型应用,读者可以随查随用,针对SQL Server和Oracle进行讲解,很有代表性。 全书共包括大小实例317个,突出了速学速查的特色。《精通SQ:结构化查询语言...

    Oracle SQL高级编程(资深Oracle专家力作,OakTable团队推荐)--随书源代码

    10.3 递归子查询 273 10.3.1 一个CONNECT BY的例子 274 10.3.2 使用RSF的例子 275 10.3.3 RSF的限制条件 276 10.3.4 与CONNECT BY的不同点 276 10.4 复制CONNECT BY的功能 277 10.4.1 LEVEL伪列 278 10.4.2 ...

    精通SQL--结构化查询语言详解

    9.4.4 对多表进行union运算 181 9.4.5 union join 连接表 183 9.5 表连接的其他应用及注意问题 183 9.5.1 连接表进行聚合运算 183 9.5.2 多表连接的综合运用 185 9.5.3 多表连接注意事项 186 第10章 子查询 ...

Global site tag (gtag.js) - Google Analytics