`

ORACLE树状查询

阅读更多

select * from balance_sheet  connect by prior balance_sheet.bs_id= balance_sheet.bs_pid start with balance_sheet.bs_pid=7 ;

其中 start with balance_sheet.bs_pid=7 ; 代表从哪个父ID开始查询

bs_id  : 实际id

bs_pid : 父id

connect by prior balance_sheet.bs_id= balance_sheet.bs_pid

 

可用参数:

level  当前节点所在深度

CONNECT_BY_ISLEAF 是否是叶子节点(1:是;0:否)

 

写道
SQL> select * from t_dept_temp;

DEPT_ID PARENT_ID DEPT_NAME AMOUNT
---------- ---------- ---------- ----------
1 1 2
2 1 1-2 15
3 1 1-3 8
4 2 1-2-4 10
5 2 1-2-5 9
6 3 1-3-6 17
7 3 1-3-7 5
8 3 1-3-8 6

已选择8行。

SQL> desc t_dept_temp;
名称 是否为空? 类型
----------------------------------------- -------- ----------------------------
DEPT_ID NOT NULL NUMBER(2)
PARENT_ID NUMBER(2)
DEPT_NAME VARCHAR2(10)
AMOUNT NUMBER(3)

接下来实现各种查询的测试:
1.查询dept_id=2以及所有下级部门:
SQL> select level treelevel,dept_id,parent_id,dept_name from t_dept_temp
2 start with dept_id=2
3 connect by parent_id = prior dept_id;

TREELEVEL DEPT_ID PARENT_ID DEPT_NAME
---------- ---------- ---------- ----------
1 2 1 1-2
2 4 2 1-2-4
2 5 2 1-2-5

2.查询dept_id=4以及所有上级部门:
SQL> select level treelevel,dept_id,parent_id,dept_name from t_dept_temp
2 start with dept_id=4
3 connect by dept_id = prior parent_id;

TREELEVEL DEPT_ID PARENT_ID DEPT_NAME
---------- ---------- ---------- ----------
1 4 2 1-2-4
2 2 1 1-2
3 1 1

3.查询dept_id=1以及所有下级部门:
SQL> select level treelevel,dept_id,parent_id,dept_name from t_dept_temp
2 start with dept_id=1
3 connect by parent_id = prior dept_id;

TREELEVEL DEPT_ID PARENT_ID DEPT_NAME
---------- ---------- ---------- ----------
1 1 1
2 2 1 1-2
3 4 2 1-2-4
3 5 2 1-2-5
2 3 1 1-3
3 6 3 1-3-6
3 7 3 1-3-7
3 8 3 1-3-8

已选择8行。

4.查询dept_id=1以及所有下级部门,但除了部门3 (排除树枝,部门3下的所有节点也都排除)
SQL> select level treelevel,dept_id,parent_id,dept_name from t_dept_temp
2 start with dept_id=1
3 connect by parent_id=prior dept_id and dept_id <> 3;

TREELEVEL DEPT_ID PARENT_ID DEPT_NAME
---------- ---------- ---------- ----------
1 1 1
2 2 1 1-2
3 4 2 1-2-4
3 5 2 1-2-5

5.查询dept_id=1以及所有下级部门,但除了部门3 (仅排除部门3,其下的所有节点都是包括的)
SQL> select level treeview, dept_id,parent_id,dept_name from t_dept_temp
2 where dept_id <> 3
3 start with dept_id=1
4 connect by parent_id = prior dept_id;

TREEVIEW DEPT_ID PARENT_ID DEPT_NAME
---------- ---------- ---------- ----------
1 1 1
2 2 1 1-2
3 4 2 1-2-4
3 5 2 1-2-5
3 6 3 1-3-6
3 7 3 1-3-7
3 8 3 1-3-8

已选择7行。
注意这里的where dept_id <> 3,他的执行是在connect by之后做的


 

分享到:
评论

相关推荐

    oracle树形查询

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

    Oracle递归树形结构查询功能

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

    oracle树结构查询方法

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

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

    Oracle树形结构查询,层次查询,hierarchical retrieval Oracle中的树形结构查询,也被称为层次查询或hierarchical retrieval,是一种获取树形结构数据的方法。这种方法可以将数据组织成树形结构,具有层次关系的...

    【Oracle】树状结构查询

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

    Oracle查询树形结构

    - 网络分析:在社交网络或网络拓扑分析中,树形查询能够帮助找出节点之间的层级连接。 需要注意的是,在使用START WITH...CONNECT BY PRIOR进行查询时,需要考虑到循环引用的问题,因为这样的查询结构容易出现无限...

    oracle树状查询

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

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

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

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

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

    oracle菜单树查询

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

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

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

    Oracle树结构查询(图)

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

    Oracle树查询总结

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

    oracle树查询

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

    Oracle树查询及相关函数

    Oracle树查询是数据库管理中一种非常实用的技术,它允许我们处理具有层级关系的数据。在Oracle中,树查询主要依赖于`SELECT...START WITH...CONNECT BY...PRIOR`语法,这个语法让我们能够按照层级结构遍历数据。本文...

    oracle查询成树状

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

    ibatis下oracle树查询

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

    Oracle查询优化改写技巧与案例

    第5~12章是提高部分,讲解了正则表达式、分析函数、树形查询及汇总函数的用法。这部分知识常用于对一些复杂需求的实现及优化改写。最后两章介绍日常的优化改写案例。这部分是前面所学知识的扩展应用。, 如果您是开发...

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

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

Global site tag (gtag.js) - Google Analytics