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

oracle 取树形结构的数据,一条sql

 
阅读更多

例子:select * from tb_cod_field_desc where table_code_flag='10000110' start with superior_code=120 connect by prior code=superior_code

 

 

 

用到的oracle函数是:start with ...connect by...

 

以下是从处找到的相关解释:

racle中start with...connect by prior子句用法 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 是过滤条件,用于对返回的所有记录进行过滤。 

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

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

     1. 树结构的描述 
树 结构的数据存放在表中,数据之间的层次关系即父子关系,通过表中的列与列间的关系来描述,如EMP表中的EMPNO和MGR。EMPNO表示该雇员的编 号,MGR表示领导该雇员的人的编号,即子节点的MGR值等于父节点的EMPNO值。在表的每一行中都有一个表示父节点的MGR(除根节点外),通过每个 节点的父节点,就可以确定整个树结构。 
在SELECT命令中使用CONNECT BY 和蔼START WITH 子句可以查询表中的树型结构关系。其命令格式如下: 
SELECT 。。。 
CONNECT BY {PRIOR 列名1=列名2|列名1=PRIOR 裂名2} 
[START WITH]; 
其 中:CONNECT BY子句说明每行数据将是按层次顺序检索,并规定将表中的数据连入树型结构的关系中。PRIORY运算符必须放置在连接关系的两列中 某一个的前面。对于节点间的父子关系,PRIOR运算符在一侧表示父节点,在另一侧表示子节点,从而确定查找树结构是的顺序是自顶向下还是自底向上。在连 接关系中,除了可以使用列名外,还允许使用列表达式。START WITH 子句为可选项,用来标识哪个节点作为查找树型结构的根节点。若该子句被省略, 则表示所有满足查询条件的行作为根节点。 
START WITH: 不但可以指定一个根节点,还可以指定多个根节点。 
2. 关于PRIOR 
运算符PRIOR被放置于等号前后的位置,决定着查询时的检索顺序。 
PRIOR被置于CONNECT BY子句中等号的前面时,则强制从根节点到叶节点的顺序检索,即由父节点向子节点方向通过树结构,我们称之为自顶向下的方式。如: 
CONNECT BY PRIOR EMPNO=MGR 
PIROR运算符被置于CONNECT BY 子句中等号的后面时,则强制从叶节点到根节点的顺序检索,即由子节点向父节点方向通过树结构,我们称之为自底向上的方式。例如: 
CONNECT BY EMPNO=PRIOR MGR 
在这种方式中也应指定一个开始的节点。 
3. 定义查找起始节点 
     在自顶向下查询树结构时,不但可以从根节点开始,还可以定义任何节点为起始节点,以此开始向下查找。这样查找的结果就是以该节点为开始的结构树的一枝。 
4.使用LEVEL 
在具有树结构的表中,每一行数据都是树结构中的一个节点,由于节点所处的层次位置不同,所以每行记录都可以有一个层号。层号根据节点与根节点的距离确定。不论从哪个节点开始,该起始根节点的层号始终为1,根节点的子节点为2, 依此类推。 
5.节点和分支的裁剪 
在对树结构进行查询时,可以去掉表中的某些行,也可以剪掉树中的一个分支,使用WHERE子句来限定树型结构中的单个节点,以去掉树中的单个节点,但它却不影响其后代节点(自顶向下检索时)或前辈节点(自底向顶检索时)。 
6.排序显示 
象在其它查询中一样,在树结构查询中也可以使用ORDER BY 子句,改变查询结果的显示顺序,而不必按照遍历树结构的顺序 

----------------------------------------------------------------------------------------------------------

oracle 提供了start with connect by 语法结构可以实现递归查询。

分享到:
评论

相关推荐

    Oracle SQL树形结构查询

    Oracle SQL中的树形结构查询是一种强大的工具,特别适用于处理具有层级关系的数据,如组织结构、部门树、产品分类等。这种查询方式利用`START WITH...CONNECT BY PRIOR`子句来实现递归,使得我们可以从数据库中检索...

    Oracle高级sql学习与练习

    5. 层次查询(HIERARICAL RETRIVEL)通常指在Oracle中通过CONNECT BY语句实现的树形结构数据查询,可以方便地查询具有层级关系的数据。 6. DECODE函数和行列互换则是对数据进行条件处理和转置的重要工具。DECODE...

    Oracle递归树形结构查询功能

    概要:树状结构通常由根节点、父节点、子节点和叶节点组成,简单来说,一张表中存在两个字段,dept_id,par_dept_id,那么通过找到每一条记录的父级id即可形成一个树状结构,也就是par_dept_id(子)=dept_id(父),...

    oracle树查询

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

    Oracle 开发DBA SQL编写规范

    - 使用递归公共表达式(Recursive Common Table Expressions, RCTE)来处理树形结构数据。 - 示例: ```sql with recursive tree as ( select id, parent_id, name from tab1 where parent_id is null union ...

    oracle中sql函数小结

    这部分内容展示了如何使用`CONNECT BY`和`START WITH`来遍历树形结构的数据。例如,为了计算一个组织结构的深度,我们可以使用以下SQL语句: ```sql SELECT COUNT(DISTINCT LEVEL) FROM emp START WITH empno = ...

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

    在数据库管理中,处理树形结构的数据是一种常见的需求,例如组织结构、目录树或产品分类等。PostgreSQL 提供了一种方法来处理这种层级关系,即递归查询。本文将详细探讨如何在 PostgreSQL 中进行树形结构的递归查询...

    sql_函数实现三种父子递归

    在SQL中,递归函数是处理层次结构数据的有效方法,特别是在构建树形结构如菜单树或权限树时。本文将探讨如何使用SQL函数实现三种常见的递归查询:找到所有子节点、查找所有父节点以及面包屑导航数据。我们将通过一个...

    sql高级进阶

    - 树形查询:介绍如何在数据库中查询层次数据。 以上详细知识点是对【部分内容】中提供的主题的具体阐述。这些知识点构成了SQL高级进阶学习的完整体系,覆盖了数据查询、数据处理、多表操作、字符串和数值处理、...

    SQLExplorer.rar

    3. **数据库对象浏览器**:SQLExplorer允许用户以树形结构查看数据库中的所有对象,如表、视图、存储过程、函数等。用户可以直接在浏览器中右键点击对象进行操作,如查看表结构、运行SQL查询、导出数据等。 4. **...

    数据结构伪代码

    - **非线性结构**包括树形结构(如二叉树)、图形结构等,这类结构中的元素之间存在着一对多或多对多的关系。 #### 二、Oracle数据库中的伪列与伪表 Oracle数据库作为业界领先的数据库管理系统之一,提供了多种...

    oracle执行计划详解

    表格形式是基础的呈现,而树形结构则更直观地展示了操作符之间的层级关系和数据流向。 需要强调的是,虽然本讲座提供了有关如何阅读执行计划的基础知识,但成为一名优化器专家或具备调整SQL语句的能力并非一蹴而就...

    oracle 树型的寻父或寻子

    在Oracle数据库中,树型结构的数据模型是一种常见的数据组织方式,尤其在表示层次关系时非常有用,例如组织架构、产品分类、供应链等。本篇主要探讨如何在Oracle中进行树型结构的寻父或寻子操作,这涉及到一系列的...

    SQL最佳实践

    通过定义父节点和子节点之间的关系,可以轻松地构建出树形结构的数据。 - **Oracle用法**:使用`CONNECT BY PRIOR`子句来指定层次关系。 - **CONNECT_BY在DB2、SQL Server中的实现**:虽然不同数据库系统的实现方式...

    oracle-use.rar_Oracle drop use_oracle

    "按照当前层次级别排序"可能是指在层次查询中使用`CONNECT BY`和`PRIOR`关键字,这在处理树形结构的数据时非常有用。例如,`SELECT * FROM table START WITH condition CONNECT BY PRIOR id = parent_id ORDER ...

    Oracle递归查询

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

Global site tag (gtag.js) - Google Analytics