`
huangkun1123
  • 浏览: 23773 次
  • 性别: Icon_minigender_1
  • 来自: 程序帝国
社区版块
存档分类
最新评论

oracle中的树状查询

阅读更多

Start with connect by prior

在SELECT命令中使用CONNECT BY和蔼START WITH子句可以查询表中的树型结构关系。其命令格式如下:


SELECT。。。

CONNECT BY {PRIOR列名1=列名2|列名1=PRIOR列名2}

[START WITH];

其中:CONNECT BY子句说明每行数据将是按层次顺序检索,并规定将表中的数据连入树型结构的关系中。PRIORY运算符必须放置在连接关系的两列中某一个的前面。对于节点间的父子关系,PRIOR运算符在一侧表示父节点,在另一侧表示子节点,从而确定查找树结构是的顺序是自顶向下还是自底向上。在连接关系中,除了可以使用列名外,还允许使用列表达式。START WITH子句为可选项,用来标识哪个节点作为查找树型结构的根节点。若该子句被省略,则表示所有满足查询条件的行作为根节点。

 

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
 order by pid
 
从末梢往树ROOT递归
select * from TBL_TEST
 start with id=5
 connect by prior pid = id
 order by id

 

**************************************************************************

CREATE TABLE xxuts_test_start
(
  ID    varchar2(100),
  NAME  VARCHAR2(100)
);

 

select id,name,level from xxuts_test_start
start with id='A'
connect by prior name=id
order by id

 

id     name   level
 A    B        1
 A    C        1
 A    D        1
 B    E         2
 B    F         2
 C    H        2
 E    G         3
 
 
 
 
 
 
***************************************************************
         SELECT transaction_id,
                primary_quantity,
                primary_unit_of_measure,
                source_doc_unit_of_measure,
                transaction_type,
                parent_transaction_id
                      
               FROM rcv_transactions
              WHERE invoice_status_code <> 'INVOICED'
                -- added trx date range as per gap228 -- rsk 07/12/07
/*               AND TRUNC (transaction_date)
                       BETWEEN TRUNC (NVL (to_date('20080601','YYYYMMDD'), transaction_date))
                           AND TRUNC (NVL (to_date('20080620','YYYYMMDD'), transaction_date))*/
         START WITH transaction_id = 276195
          CONNECT BY parent_transaction_id = PRIOR transaction_id;
 
**************************************************
           SELECT transaction_id
         --INTO l_rcv_transaction_id
         FROM rcv_transactions
        WHERE transaction_type = 'RECEIVE'
        START WITH transaction_id = 116231
      CONNECT BY transaction_id = PRIOR parent_transaction_id;   

 

分享到:
评论

相关推荐

    Oracle递归树形结构查询功能

    总之,Oracle的递归树形结构查询功能是处理层次数据的强大工具,能够有效地支持组织结构、树状分类等业务场景。通过熟练掌握这一特性,开发者可以在数据库层面高效地解决复杂的数据查询问题,减少应用程序的负担。

    Oracle查询树形结构

    首先,要了解的是,在Oracle中,树形结构数据的查询主要依赖于START WITH...CONNECT BY PRIOR语句。这种查询方式允许用户指定起始节点(根节点),并通过CONNECT BY子句定义父子节点之间的递归关系。这种方式特别...

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

    在`Oracle中的树状查询(递归查询) - 鱼与飞鸟 - CSDNBlog.htm`这篇博客中,作者通过具体的实例详细讲解了如何在权限查询中使用递归查询,包括如何建立树形结构,以及如何避免无限递归等问题。 8. **补充资源** - ...

    【原创】oracle树形结构查询,层次查询,hierarical retrival

    Oracle中的树形结构查询,也被称为层次查询或hierarchical retrieval,是一种获取树形结构数据的方法。这种方法可以将数据组织成树形结构,具有层次关系的报表。树形结构的数据集合存在于我们日常生活中的很多地方,...

    oracle树形查询

    最近项目中遇到,开始不太了解,现在分享一下,希望可以帮助其他人

    【Oracle】树状结构查询

    ### Oracle树状结构查询原理 树状结构查询主要依赖于`START WITH`和`CONNECT BY PRIOR`这两个关键语法。`START WITH`用于指定查询的起始节点,而`CONNECT BY PRIOR`则定义了节点之间的关系,从而实现对树状结构的...

    oracle菜单树查询

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

    Oracle 数据库树形结构用法总结.mht

    Oracle 数据库树形结构用法总结,例如SYS_CONNECT_BY_PATH 、START WITH . . . CONNECT BY . . .等具体语法介绍

    oracle树结构查询方法

    总之,Oracle数据库支持对树形结构数据的高效查询,通过`CONNECT BY`和`START WITH`子句,我们可以轻松地构建和遍历这些层次关系,这对于理解和操作复杂的数据结构至关重要。在进行树结构查询时,理解这些语句的工作...

    Oracle树查询总结

    Oracle 数据库在处理树形数据结构时,提供了一种强大的查询方法,即 `SELECT...START WITH...CONNECT BY...PRIOR` 语法。这种查询模式允许我们以递归方式遍历和检索具有层级关系的数据,例如组织结构、产品分类或者...

    oracle查询成树状

    在Oracle数据库中,将查询结果转化为树状结构是一项高级而实用的技能,尤其适用于处理具有层级关系的数据,如产品分类、组织架构等。本篇将深入解析如何利用Oracle的特定功能,实现数据的树状展示。 ### 核心概念:...

    Oracle树结构查询(图)

    Oracle通常使用自连接来模拟树形结构,即通过一个表中的字段引用自身来建立层级关系。例如,一个"员工"表中,"上级员工ID"字段可以引用"员工ID"字段,形成上下级关系,从而构建出组织结构的树状模型。 查询树结构...

    oracle树形结构,结合dtree插件使用显示树状结构菜单

    本主题将深入探讨如何在Oracle中利用树形结构以及如何结合dtree插件来显示树状结构菜单。 首先,Oracle中的树形结构通常通过递归关系或层次查询来实现。例如,员工组织结构、产品分类或地理区域等都是常见的层次化...

    Ajax+jsp+oracle实现动态树形菜单

    在IT行业中,动态树形菜单是一种常见的用户界面元素,它能以树状结构展示数据,使得用户能够方便地浏览和操作层次化的信息。本项目利用Ajax、JSP和Oracle数据库技术,实现了这样一个功能,让我们来深入探讨一下这些...

    oracle树查询

    在Oracle数据库中,进行树状结构数据查询时,通常会使用到特定的查询语法,包括`START WITH`、`CONNECT BY PRIOR`等关键字。本文将详细介绍这些关键字及其应用场景,并通过具体示例来帮助理解。 #### 一、基本概念 ...

    Oracle中树的操作

    在Oracle数据库管理中,处理树形结构数据是一项常见需求。本文将详细介绍如何通过PL/SQL过程实现在Oracle数据库中复制树状节点,并将其作为一个新的树节点进行插入。 #### 1. 创建树形表结构 首先,我们需要创建一...

    Oracle树查询及相关函数

    在Oracle中,树查询主要依赖于`SELECT...START WITH...CONNECT BY...PRIOR`语法,这个语法让我们能够按照层级结构遍历数据。本文将深入探讨这个语法以及与之相关的函数,并通过实例来说明它们的用法。 首先,我们...

    oracle树状查询

    递归子查询可以通过嵌套的SELECT语句实现,但这种方式在Oracle中通常效率较低,不推荐用于大量数据的树状查询。示例如下: ```sql WITH RECURSIVE tree AS ( SELECT id, parent_id, name FROM department WHERE ...

    Oracle+level树形查询学习所需

    Oracle+level树形查询学习所需

    ibatis下oracle树查询

    在本话题中,我们将探讨如何在使用iBatis框架与Oracle数据库时实现树形查询。 首先,iBatis是一个优秀的持久层框架,它允许开发者将SQL语句直接写在XML配置文件或者注解中,提供了比传统JDBC更高级的抽象层,使得...

Global site tag (gtag.js) - Google Analytics