`

oracle表关联层级树查询

 
阅读更多
select level
      ,lpad(' ', (level - 1) * 20, ' ') || t.fk_table as node_name --节点名称(带缩进)
      ,t.fk_name
      ,t.fk_table
      ,t.pk_name
      ,t.pk_table
  from (select null           as fk_name
              ,uta.table_name as fk_table
              ,null           as pk_name
              ,null           as pk_table
          from user_tables uta
         where not exists (select 1
                  from user_constraints uc
                 where uc.constraint_type = 'R'
                   and uc.table_name = uta.table_name)
        union all
        select a.constraint_name as fk_name
              ,a.table_name      as fk_table
              ,b.constraint_name as pk_name
              ,b.table_name      as pk_table
          from user_constraints a
              ,user_constraints b
         where a.constraint_type = 'R'
           and b.constraint_type = 'P'
           and a.r_constraint_name = b.constraint_name) t
start with t.pk_table is null
connect by prior t.fk_table = t.pk_table
--
;

从父节点查询子节点
start with t.pk_table is null
connect by prior t.fk_table = t.pk_table

从子节点查询父节点
start with t.fk_table = 'ASSIGN'
connect by prior t.pk_table = t.fk_table



--alias as child and parent

select level
      ,lpad(' ', (level - 1) * 20, ' ') || t.child_table as node_name --节点名称(带缩进)
--      ,t.node_name
      ,t.child_table
--      ,t.pk_name
      ,t.parent_table
  from (select null           as node_name
              ,uta.table_name as child_table
              ,null           as pk_name
              ,null           as parent_table
          from user_tables uta
         where not exists (select 1
                  from user_constraints uc
                 where uc.constraint_type = 'R'
                   and uc.table_name = uta.table_name)
        union all
        select a.constraint_name as node_name
              ,a.table_name      as child_table
              ,b.constraint_name as pk_name
              ,b.table_name      as parent_table
          from user_constraints a
              ,user_constraints b
         where a.constraint_type = 'R'
           and b.constraint_type = 'P'
           and a.r_constraint_name = b.constraint_name) t
start with t.parent_table is null
connect by prior t.child_table = t.parent_table
--
;
分享到:
评论

相关推荐

    Oracle树查询实例分析

    Oracle树查询是数据库管理中处理层次结构数据的重要技术,它主要依赖于`SELECT...START WITH...CONNECT BY...PRIOR`的语法。这个语法允许我们按照树的结构来组织和检索数据,尤其适用于表示组织结构、目录层级或者...

    oracle查询成树状

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

    Oracle复杂查询语句的使用

    ### Oracle复杂查询语句的使用 ...总结来说,Oracle中的复杂查询语句是处理多表关联、多层次数据的有效工具。通过对连接查询、嵌套查询和递归查询的理解与运用,可以大大提高数据处理的能力和效率。

    第22讲 SQL语言高级04--多表关联查询.PPT

    自连接是一种特殊的连接方式,它允许一个表与自身进行连接,通常用于分析具有层级关系的数据,如组织结构或家庭树。例如,找出所有有直接上级的员工: ```sql SELECT e1.employee_id, e1.last_name, e2.last_name ...

    asp.net TreeView实现多表嵌套复合查询(数据库ORACLE)

    在多表嵌套查询中,可能涉及JOIN操作,例如INNER JOIN、LEFT JOIN或RIGHT JOIN,以及子查询来获取层级关系。例如,假设我们有两张表:Department(部门)和Employee(员工),Department有父部门ID(ParentDeptID)...

    Oracle连接查询子查询以及存储过程触发器讲解

    在数据库操作中,连接查询用于合并两个或更多表的数据,根据它们之间的关联来获取所需的结果。主要有内连接(INNER JOIN)、外连接(LEFT JOIN、RIGHT JOIN、FULL JOIN)和自连接等类型。内连接返回两个表中匹配的行...

    Oracle数据库的分层查询

    在层级查询中,`LEVEL` 是一个伪列,用于表示数据在层级结构中的深度。`SELECT` 语句中包含 `level` 列,可以展示每个员工在其层级中的位置。例如,`WHERE level 可以限制只返回前两层的员工,这对于快速查看高层...

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

    在本例中,"oracle树形结构"可能指的是利用Oracle数据库存储和查询树形结构数据的方法。这可能涉及到创建适当的表结构,定义父子节点关系的字段,以及编写查询语句来获取层级数据。查询可能包括查找特定节点的所有子...

    oracle树结构查询.DOC

    总的来说,Oracle的`START WITH...CONNECT BY`语法提供了一种强大而灵活的方式来处理树形数据,使得我们能够轻松地查询和展示具有层级关系的数据。理解和熟练掌握这些概念,对于处理复杂的组织结构或者其他层次数据...

    oracle递归查询的例子

    递归查询允许用户执行多级关联查询,特别适用于处理具有层次结构的数据,例如组织结构图、文件系统目录等。本文将通过一个具体的例子来详细介绍如何在 Oracle 中实现递归查询。 #### 二、基础知识回顾 在深入讨论...

    oracle form tree步骤

    ` 这两行代码切换到"EMP"数据块并执行查询,这样用户就能看到与选定树节点关联的详细信息。 5. 其他相关知识点: - `Find_Item` 函数:用于查找表单中的项(Item)。 - `Ftree` 是Oracle Forms提供的树形控件的...

    oracle scott用户的表

    - **MGR**:该雇员经理人的编号,类型为`NUMBER(4)`,通过与`EMPNO`字段关联,形成了雇员间的层级关系。 - **HIREDATE**:入职时间,类型为`DATE`,记录了雇员加入公司的具体日期。 - **SAL**:薪水,类型为`NUMBER...

    Oracle数据库中的级联查询、级联删除、级联更新操作教程

    Oracle数据库中的级联查询、级联删除和级联更新是数据库设计中常用的操作,它们用于在多表关联的关系型数据库中实现数据的联动处理。在Oracle中,这些操作主要涉及外键约束和触发器。 首先,级联查询是通过自连接来...

    oracle-tree-sql.rar_oracle

    本资料"oracle-tree-sql.rar_oracle"主要探讨的就是如何在Oracle中使用SQL查询树形结构数据。 一、Oracle树结构查询基础 1.1 连接查询(Connect By) Oracle的Connect By子句是处理层次数据的核心工具。它允许...

    biee父子维

    3. **关联表**:根据字段建立表之间的关联,具体关联为: - `B2.EMPLOYEE_KEY=B4.ANCESTOR_KEY` - `B4.MEMBER_KEY=B6.EMPL_KEY` 4. **业务模型与映射**:将`B6`(即事实表)拖拽到业务模型和映射中,并修改度量...

    自关联表练习:全国各省市信息.zip

    此外,对于这种层级数据,还可以利用树形遍历算法(如预序遍历、中序遍历或后序遍历)进行处理,或者使用层次查询技巧,如`CONNECT BY`(在某些数据库系统如Oracle中可用)。但请注意,MySQL不直接支持`CONNECT BY`...

    Oracle中层次查询的使用和探讨.pdf

    Oracle数据库中的层次查询(Hierarchical Queries)是一种强大的功能,它扩展了标准SQL语言,使得能够高效地处理具有层级关系的数据。这种查询方式尤其适用于处理树形结构的数据,例如组织架构、文件目录等。 首先...

    树形查询带记录数量

    当我们谈论“树形查询带记录数量”时,我们指的是在数据库查询过程中,不仅获取数据的层级结构,同时也计算并显示每个层级节点下的记录总数。这种查询方式在组织层次结构数据时非常有用,例如组织结构、产品分类、...

    oracle 树型的寻父或寻子

    Oracle提供了CONNECT BY子句,它允许我们在一个查询中多次引用同一张表,从而实现层级数据的遍历。通过指定START WITH条件来定义树的根节点,然后使用CONNECT BY表达式来定义节点之间的连接规则。例如,如果我们有一...

    数据库设计之递归树查询

    在数据库设计中,递归查询是一种处理层级关系数据的关键技术,尤其在存在多级关联的数据结构时显得尤为重要。本文将深入探讨如何通过递归查询来解决这类问题,并着重讲解使用`WITH`语句来实现递归查询的方法,适用...

Global site tag (gtag.js) - Google Analytics