`
momodog
  • 浏览: 104777 次
  • 性别: 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递归树形结构查询功能

    例如,它可以将每个节点的路径作为字符串返回,便于理解和分析树结构。 在实际应用中,例如组织结构的展示,我们可以创建一个包含部门信息的表`SYS_DEPT`,其中`dept_id`为主键,`par_dept_id`表示父级部门ID,以此...

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

    这里,我们将深入探讨如何使用递归查询来构建菜单树,并特别关注在MySQL和Oracle这两种广泛使用的数据库系统中的实现。 首先,我们要理解什么是递归查询。递归查询是一种在数据库中处理层次数据的方法,它通过自身...

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

    在数据库系统中实现树结构表递归查询是一种常见的需求,它允许我们查询出具有层级关系的数据。ORACLE、MSSQL(Microsoft SQL Server)、MYSQL是三大主流数据库系统,它们各自提供了不同的方式来实现递归查询。 首先...

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

    在Oracle中,对树的递归查询主要依赖于`CONNECT_BY`功能。`CONNECT_BY`是Oracle SQL的一个扩展,用于处理层次查询。它允许我们通过指定的连接条件来遍历层级数据,从而进行递归查询。例如,我们可以用以下方式查询一...

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

    Oracle数据库系统在处理层次数据或树形结构时,提供了强大的工具——递归查询。递归查询允许我们在数据表中处理嵌套级别的数据,这在权限查询、组织结构、产品分类等场景中尤其常见。本文将深入探讨Oracle中的树状...

    Oracle递归SQL学习

    这意味着在生成HTML或其他格式的输出时,如果需要递归地展示树结构,我们需要借助其他方法,比如在后端代码(如Java、Python等)中实现递归逻辑,或者寻找支持递归渲染的其他模板引擎。 总的来说,Oracle的递归SQL...

    Oracle查询树形结构

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

    递归查询父子关系记录 oracle

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

    Oracle树结构查询(图)

    在处理复杂的数据查询时,尤其在数据具有层次性或树状结构的情况下,Oracle提供了一种高效的方法——树结构查询。本篇文章将深入探讨Oracle如何处理这类查询,并通过一个具体的文档案例进行解析。 首先,我们要了解...

    Oracle 递归函数介绍

    Oracle 递归函数是一种特殊的PL/SQL函数,可以用于解决复杂的树形结构查询问题。递归函数可以自我调用,以便遍历树形结构的每个节点,直到达到停止条件。 在 Oracle 中,递归函数的定义语法如下所示: ```sql ...

    Oracle递归查询

    为了更好地理解Oracle中的递归查询,我们首先需要创建一张表格来存储一个简单的树形结构。下面是一张名为`TEST_TREE`的表,包含以下列: - `ID`: 主键,标识每个节点。 - `PID`: 父节点ID,表示当前节点的上一级...

    数据库设计之递归树查询

    以下是在Oracle中进行递归查询的例子: ```sql SELECT id, name, CONNECT_BY_ROOT id AS root_id FROM employees START WITH id = some_employee_id CONNECT BY PRIOR id = manager_id; ``` 六、注意事项与优化 1....

    oracle菜单树查询

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

    dhtmlx tree 使用,与oracle递归查询的结合

    在Oracle中,进行递归查询通常使用的是`CONNECT BY`子句,它可以遍历层次结构数据,例如组织结构或具有层级关系的产品目录。递归查询允许我们从一个起点开始,通过指定的连接条件递归地获取所有相关的子节点。 **...

    MySQL递归查询

    MySQL 递归查询是指在 MySQL 中实现类似 Oracle Hierarchical Queries 的功能,用于查询树形结构中的所有子节点。由于 MySQL 目前还没有内置的递归查询功能,因此需要使用其他方法来实现。 第一种方法:使用函数来...

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

    在Oracle数据库中,递归查询是一种强大的工具,用于处理层级数据结构,如组织结构、文件系统或树形关系。在本篇文章中,我们将探讨如何利用递归查询来查找父子兄弟节点,这对于理解和处理这类关系非常关键。 首先,...

    ibatis下oracle树查询

    通过指定起始节点(START WITH)和连接条件(CONNECT BY),我们可以构建出一个递归查询,从而获取整个树结构。 例如,假设我们有一个部门表DEPARTMENTS,包含ID(主键)、PARENT_ID(父ID)和NAME(部门名称)字段...

    Oracle树查询总结

    Oracle 数据库在处理树形数据结构时,提供了一...例如,对于大型树结构,可能需要考虑索引、并行查询、分区等优化手段。同时,理解这些查询如何工作,以及它们在不同情况下的表现,对于数据库设计和查询优化至关重要。

    oracle树结构查询.DOC

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

Global site tag (gtag.js) - Google Analytics