之前一直有这么一个问题总是觉得不能用sql直接解决:数据库里面存储了树形结构,并且每一层都按一个orderby字段排序,怎么使用一个sql直接查出树形结构从上到下的顺序呢?今天终于有时间研究了一下,下面把数据库结构和sql贴出来大家一起参考一下。
首先说说我们的数据结构:机构表sys_organization(id,parent_organ,organ_simple_name,orderby),部门表sys_department(id,parent_department,sys_organization,department_name,orderby)(因为部门是挂在机构下面的,对于上级部门即parent_department为空的那些部门则是直接挂在机构下面,而parent_department不为空的话则是挂在部门下面),用户表sysuser(id,sys_department,user_name,orderby)(对于用户则是直接挂在部门下面的)
select rs.*,level from (
select 'org'||org.id id,'org'||org.parent_organ pid,org.organ_simple_name showname,org.orderby orderby from sys_organization org where org.is_valid=1
union all
select 'dep'||dep.id id,'org'||dep.sys_organization pid,dep.department_name showname,dep.orderby orderby from sys_department dep where dep.is_valid=1 and dep.parent_department is null
union all
select 'dep'||dep.id id,'dep'||dep.parent_department pid,dep.department_name showname,dep.orderby orderby from sys_department dep where dep.is_valid=1 and dep.parent_department is not null
union all
select 'usr'||su.id id,'dep'||su.sys_department pid,su.user_name showname,su.orderby orderby from sysuser su where su.is_valid=1
)rs connect by rs.pid=prior rs.id start with rs.id='org1' order siblings by rs.orderby
这样就可以查出按机构部门用户构成树,同时内部使用orderby排序顺序的一个查询结果
分享到:
相关推荐
### Connect By Prior 数据库树的应用 #### 概述 在关系型数据库中,尤其是在 Oracle 数据库环境下,构建和查询层次结构数据是一项常见的需求。通过使用 `Connect By Prior` 存储过程,我们可以有效地处理这类问题...
Connect By是一种递归查询语句,用于实现树形结构的查询和遍历。它是 Oracle 数据库中的一种特色语句,能够高效地查询树形结构的数据。 Connect By的基本语法 Connect By语句的基本语法如下: ```sql SELECT [/*+ ...
在Oracle数据库中,`CONNECT BY` 是一个非常重要的SQL语法,用于构建层次查询,它能够帮助我们处理具有层级关系的数据,比如组织结构、产品分类、树形菜单等。`CONNECT BY` 查询允许从一个表中抽取数据,并按照指定...
`CONNECT BY`是Oracle SQL中用于处理树形数据结构的关键字,它允许我们根据指定的连接条件遍历层级关系。通常,`CONNECT BY`与`START WITH`一起使用,`START WITH`指定了层级遍历的起始节点。 例如,假设我们有一个...
通过实例比较了 SYS_CONNECT_BY_PATH 和 CONNECT_BY_ROOT 的异同,和返回树形的数据结构
虽然`Connect By Prior`默认按照树的遍历顺序返回结果,但可以通过`ORDER BY`子句改变结果的显示顺序。 #### 总结 `Connect By Prior`是Oracle数据库中处理层次结构数据的强大工具。通过正确地设置`START WITH`、`...
### Oracle的Connect By使用示例 #### 一、引言 在关系数据库系统中,进行树状或层次结构数据查询时经常会遇到复杂性问题。Oracle数据库通过提供`START WITH...CONNECT BY`语句来简化这类查询操作。此功能最早出现...
递归树形结构查询主要依赖于`CONNECT BY`和`PRIOR`关键字,它们允许我们构建复杂的层级查询,以展示数据的层次关系。 在Oracle中,树形结构查询的基本语法如下: ```sql SELECT [LEVEL], * FROM table_name START ...
最后,`ORDER BY`子句可以用于调整结果集的顺序,这不同于`CONNECT BY`自动按照树结构遍历的顺序,允许用户自定义输出结果的排列。 总的来说,`CONNECT BY PRIOR`是Oracle SQL中处理树形数据结构的强大工具,它能够...
使用 START WITH 和 CONNECT BY 子句可以实现 SQL 的层次查询,并且可以使用 SYS_CONNECT_BY_PATH 函数和 CONNECT_BY_ROOT、CONNECT_BY_ISLEAF、CONNECT_BY_ISCYCLE 等伪列函数来增强层次查询的能力。
oracle菜单树查询 使用实例 使用START WITH CONNECT BY PRIOR子句实现递归查询
Connect By 可以列出上下级关系 构造序列 求排列组合 逆转求出下上级的关系路径
### Oracle中的START WITH CONNECT BY PRIOR 用法详解 #### 一、概念介绍 在Oracle数据库中,`START WITH` 和 `CONNECT BY PRIOR` 是两个非常强大的特性,主要用于处理具有层级结构的数据。这两个特性可以帮助我们...
### DB2Connect用户指南知识点详解 #### 一、DB2Connect产品概述 - **产品版本**: DB2Connect 9.7 版本。 - **功能介绍**: - **数据库目录管理**: 支持对数据库目录进行管理和维护,确保用户能够高效地查找和访问...
本文将详细讲解如何利用`START WITH...CONNECT BY PRIOR`子句来构建和查询树形数据库表。 `START WITH...CONNECT BY PRIOR`是Oracle SQL中的一个特性,用于处理具有层级关系的数据。这个子句允许我们遍历和查询具有...
从给定的文件信息来看,这是一份关于IBM DB2 Connect的用户指南,主要涵盖了DB2 Connect的使用、配置以及与各种技术环境的集成方法。下面将根据标题、描述、标签以及部分内容,深入解析其中涉及的关键知识点。 ### ...
在SQL查询中,`START WITH` 和 `CONNECT BY` 是两个关键的子句,它们用于构建层次结构查询,通常在处理具有上下级关系的数据时非常有用,如员工与经理的关系、组织结构或者产品分类等。这两个子句是Oracle数据库特有...
本文章详细介绍了Oracle中connect by...start with...的用法。
### Oracle Start With.Connect By Prior 子句实现递归查询 #### 概述 在Oracle数据库中,`Start With.Connect By Prior`子句是执行递归查询的一种强大工具,主要用于处理层次结构数据。这类数据通常存在于组织...
文章中给出了一个名为`t_test_connectby`的数据表例子,其中包含父子关系的节点数据。通过该表,我们可以更直观地了解Connect By的执行过程。 - 不指定起始条件时,使用`CONNECT BY`: ```sql SELECT * FROM t_test...