`
manzhizhen
  • 浏览: 293354 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论
阅读更多

我们假设有如下一张机构表(ORG):

字段类型

字段名称

字段描述

NUMBER(16)

ID

机构ID

NUMBER(16)

PARENT_ID

父机构ID

VARCHAR2(100)

NAME

机构名称

NUMBER(1)

ENABLE

是否启用,1表示启用,0表示停用

 

表中有如下几行数据:

ID

PARENT_ID

NAME

ENABLE

1314

1399

信用卡后勤保障部

1

1399

5000

信用卡后勤部

1

1414

5000

信用卡业务部

0

5000

8888

信用卡总部

1

8888

9000

银行卡总部

1

9000

10000

业务部

1

10000

-1

总部

1

 

在Oracle中,我们可以采用如下语句来进行递归查询:

select ID, PARENT_ID from ORG  where [条件列表1] start with  [递归起始条件connect by prior [递归条件

其中,条件列表1用来对查询出的所有的数据进行过滤,递归起始条件用于定义递归数据的起点,而递归条件用于定义递归的规则。

 

对于上面提到的ORG表,如果我们想查出信用卡后勤部的ID和它的所有启用的上级机构的ID,就可以用如下语句:

      select ID from ORG  where ENABLE = 1 start with ID = 1399 connect by prior PARENT_ID = ID

如上,我们要查的所有机构必须是启用的,所以在where语句后面加了ENABLE = 1这一全局条件,信用卡后勤部的机构ID为1399,所以我们在start with语句后面加了ID = 1399,我们得根据这个ID行的PARENT_ID来找出其父机构,又要根据其父机构的 PARENT_ID来找出父机构的父机构,以此类推,所以我们在connect by prior 语句后面加了PARENT_ID = ID。

下面给出查询结果:

ID

1399

5000

8888

9000

10000

 

你可能会想到,如果把 connect by prior 语句后面的条件写成 ID = PARENT_ID,结果会怎样呢?

请看如下语句的结果:

      select ID from ORG  where ENABLE = 1 start with ID = 1399 connect by prior ID = PARENT_ID

ID

1399

1314

 

你想的没错!它把信用卡后勤部及其下属部门的机构ID都查出来了,所以connect by prior 语句后面的条件“=”两边的条件顺序直接影响着结果!

 

分享到:
评论

相关推荐

    oracle-递归查询地区名称

    oracle 递归调用 地区 ,用到的方法是 SYS_CONNECT_BY_PATH,可以扩展层级 名称

    oracle递归、迭代

    ### Oracle中的递归查询详解 #### 一、引言 在数据库管理中,处理具有层次结构的数据是一项常见的任务。例如,在组织结构、产品分类或文件系统等场景中,经常需要查询这种类型的层级数据。Oracle数据库提供了强大...

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

    反之,如果当前行是子行,则PRIOR column_name指向下一次递归中的column_name值。树结构表的递归查询可以用来检索组织结构、分类目录、流程跟踪等层级数据。 MSSQL中实现递归查询的方式不同于ORACLE。在MSSQL中,...

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

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

    Oracle递归树形结构查询功能

    Oracle数据库在处理树形结构数据时提供了强大的递归查询功能,这种特性对于组织结构、产品分类、层级菜单等场景的应用非常广泛。递归树形结构查询主要依赖于`CONNECT BY`和`PRIOR`关键字,它们允许我们构建复杂的...

    oracle递归查询的例子

    在数据库查询语言中,Oracle 提供了一种强大的功能——递归查询,这在其他数据库系统如 SQL Server 中是缺失的功能。递归查询允许用户执行多级关联查询,特别适用于处理具有层次结构的数据,例如组织结构图、文件...

    oracle递归查询向上向下.txt

    oracle递归查询

    Oracle递归SQL学习

    这是Oracle递归查询的关键部分。`connect by`子句定义了层次之间的连接规则。在这里,`prior`关键字用来引用上一层的值,即父节点的`parent_id`应该等于当前行的`id`,这样我们就沿着父到子的方向遍历树。 3. `...

    递归查询父子关系记录 oracle

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

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

    本文将深入探讨Oracle中的树状查询(递归查询)及其应用。 1. **递归查询原理** 递归查询基于`CONNECT BY`子句,它允许我们定义一个起始点并根据特定条件进行递归。`PRIOR`关键字用于指定当前行与父行的关系。通过...

    Oracle递归查询

    ### Oracle递归查询详解 #### 一、引言 在处理具有层级结构的数据时,递归查询是一项非常有用的技能。例如,在处理组织架构、产品分类等数据时,我们经常需要查询某一节点及其所有子节点或者从某个节点追溯到其根...

    Oracle 递归函数介绍

    在 Oracle 中,递归函数可以使用 CONNECT BY 语句来实现递归查询。CONNECT BY 语句的基本语法如下所示: ```sql SELECT ... FROM ... START WITH ... CONNECT BY ... ``` 其中,`START WITH` 子句指定了递归查询的...

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

    描述中提到,使用Oracle递归查询比在程序中实现递归查询速度更快。这是因为数据库系统通常针对这类操作进行了优化,能够更高效地处理层次结构数据。此外,数据库可以利用索引和其他优化技术,提高查询速度。而在应用...

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

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

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

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

    数据库设计之递归树查询

    以下是在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....

    深入sql oracle递归查询

    在SQL Server 2005中,递归查询使用的是`WITH`子句配合`UNION ALL`,其基本思想与Oracle类似,只是语法有所不同。例如,找出1号节点的所有子节点的查询如下: ```sql WITH my1 AS ( SELECT * FROM aaa WHERE id = ...

    MySQL递归查询

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

    oracle SQL递归的使用详解

    在Oracle数据库中,SQL递归查询是一种非常有用的工具,它允许我们处理层级关系的数据,例如组织结构、树形目录或有上下级关联的数据。本文将详细介绍如何在Oracle中使用SQL递归语句,并通过示例进行说明。 首先,...

Global site tag (gtag.js) - Google Analytics