`
jasonw68
  • 浏览: 153028 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Oracle 树分级查询

    博客分类:
  • SQL
阅读更多

1.分级查询

  select   [level],column,expr...
  from     table
  [where   condition(s)]
  [start with condition(s)]
  [connect by prior condition(s)];

  level:对每行返回一个级别,对根行level伪列返回1;对孩子的level伪列返回2,以此类推
  start with:指定层次的根行
  connct by prior:指定查询的方向

1)start with子句可以和任何有效的条件协同使用
  start with column1=value

2)使用emp表,从名字是king的雇员开始
  ...start with ename='king'
  ...start with mgr is null

3)一个start with条件可以包含子查询
  ...start with empno=(select empno
                       from   emp
                       where  ename='king')
  connect by prior column1=column2

4)使用emp表从顶向下遍历:
  ...connect by prior empno=mgr

5)使用emp表从底向上遍历:
  ...connect by empno=prior mgr

2.遍历树:

1)自顶向下遍历

例:  
  select level,empno,ename||' 雇员的经理是 '||
  prior  ename "雇佣关系"
  from   emp 
  start  with ename='king'
  connect by prior empno=mgr;
结果:
      level  empno        雇佣关系  
       1     7839    king 雇员的经理是  
       2     7566    jones 雇员的经理是 king  
       3     7788    scott 雇员的经理是 jones  
       4     7876    adams 雇员的经理是 scott  
       3     7902    ford 雇员的经理是 jones  
       4     7369    smith 雇员的经理是 ford  
       2     7698    blake 雇员的经理是 king  
       3     7499    allen 雇员的经理是 blake  
       3     7521    ward 雇员的经理是 blake  
       3     7654    martin 雇员的经理是 blake  
       3     7844    turner 雇员的经理是 blake  
       3     7900    james 雇员的经理是 blake  
       2     7782    clark 雇员的经理是 king  
       3     7934    miller 雇员的经理是 clark 

2)从底向上遍历
 
例: 
  select level,empno,ename,job,mgr
  from   emp
  start with empno=7876
  connect by empno=prior mgr;
结果:
     level  empno  ename  job       mgr  
       1    7876   adams  clerk     7788  
       2    7788   scott  analyst   7566  
       3    7566   jones  manager   7839  
       4    7839   king   president    


    
3.用level和lpad格式化分级报告
  创建一个报告,显示公司的管理层,从最高级别开始,缩进下面跟随的级别

例:
  select level,lpad(ename,length(ename)+(level*2)-2,'-') as org_chart
  from   emp
  start with ename='king'
  connect by prior empno=mgr;

结果:
     level     org_chart
      1        king  
      2        --jones  
      3        ----scott  
      4        ------adams  
      3        ----ford  
      4        ------smith  
      2        --blake  
      3        ----allen  
      3        ----ward  
      3        ----martin  
      3        ----turner  
      3        ----james  
      2        --clark  
      3        ----miller 

4.修剪分支
1)用where子句去除一个结点
 
  where ename!='scott'

2)用connect by子句去除一个分支
  
  connect by prior
  empno=mgr
  and ename!='scott'
 
分享到:
评论

相关推荐

    00571 Oracle公司内部数据库培训资料-Les19_分级查询(PPT 16页).ppt

    Oracle数据库的分级查询是数据库管理中的一个重要概念,主要用于处理具有层级关系的数据,如组织结构、产品目录等。在Oracle中,这种查询通过SQL的特殊语法实现,能够有效地生成树形结构的报表,帮助用户理解数据间...

    oracle数据库ppt中科院培训专用Lescn7PPT优秀资料.ppt

    Oracle数据库在处理层次数据时,提供了强大的分级查询功能。这些功能使得从树型结构的数据中检索、格式化和分析信息变得十分便捷。本教程重点介绍了如何理解和应用Oracle数据库的分级查询,以帮助用户掌握在实际工作...

    层次查询功能在Oracle数据库中的应用.pdf

    Oracle数据库是一种广泛使用的商业关系型数据库管理系统,其层次查询功能主要基于树形结构来处理层级数据,这种结构被广泛用于表示具有层级关系的数据,如人事组织结构、公司组织架构以及计算机目录结构等。层次查询...

    数据库开发 Oracle数据库 SQL开发教程 第10章 层次查询(共17页).pdf

    层次查询,也称为分级查询,是Oracle SQL中的一个特色功能,它允许开发者沿着数据的层级关系进行遍历,从而展示出数据的树状结构。在Oracle数据库中,这种查询主要应用于具有上下级关系的数据,如组织结构、员工管理...

    SVN分级授权工具部署手册--Windows用户认证--Visual-SVN-权限

    - 部署数据库时,本手册选用SQL Server桌面数据库进行自动部署,同时提供了支持Oracle、Sybase、MySQL、PostgreSQL等其他数据库的方案。 - 安装过程中会自动部署COM+组件,并创建MagicLtdUser Windows用户账户。 - ...

    Oracle经典笔记

    "分级取回数据.txt"可能涉及到层次查询或递归查询,这在处理具有层级关系的数据时非常有用,例如组织架构或产品分类树。 通过这些笔记,你将能够深入理解Oracle数据库操作,并具备解决实际问题的能力。记住,理论...

    父子结点树转化为多级编码探讨与研究

    综上所述,本文通过详细介绍从父子结点树形结构到多级编码转换的过程,展示了 Oracle SQL 的强大功能及其在实际应用中的价值。这种转换方法不仅简化了操作流程,还极大地提高了效率和可靠性,为相关领域的研究者和...

    《Oracle数据库编程指南》之11:运算符(Operators)

    运算符可以分为不同类型,如算术运算符、连接运算符、集合运算符、核对运算符、分级查询操作符、多重集运算符以及用户自定义运算符。 1. **算数运算符(Arithmetic Operators)**: 包括加法 (+)、减法 (-)、乘法 ...

    Delphi读取数据库内容显示在树形视图中..rar

    DBConnection负责建立与数据库的连接,DBTable或Query则用于执行SQL查询和处理数据,而TDataSource作为中介,将数据提供给其他可视组件,如我们的树形视图。 1. **数据库连接设置**: 在Delphi中,通过...

    时空数据对象存储与时空分析.pptx

    - **索引类型**:选择合适的索引类型(如R树、kd树、四叉树),提高查询效率。 - **构建策略**:根据数据分布和查询模式优化索引构建过程。 - **参数调整**:根据实际情况调整索引参数,提高查询性能。 **2. 时空...

    浪潮集团笔试往年题目(软件研发和通讯)

    - 常见数据库管理系统:MySQL、Oracle、SQL Server的特性与应用。 - NoSQL数据库:MongoDB、Redis等非关系型数据库的概念和应用场景。 6. **编译原理**: - 词法分析:识别程序中的标识符、关键字、常量等。 - ...

    PL/SQL Developer

     对象浏览器——可配置的树形浏览能够显示同PL/SQL开发相关的全部信息,使用该浏览器可以获取对象描述、浏览对象定义、创建测试脚本以便调试、使能或禁止触发器或约束条件、重新编译不合法对象、查询或编辑表格、...

    plsqldevV10注册码

    PL/SQL编辑器,具有语法加强、SQL和PL/SQL帮助、对象描述、代码助手、编译器提示、PL/SQL完善、代码内容、代码分级、浏览器按钮、超链接导航、宏库等许多智能特性,能够满足要求性最高的用户需求。当您需要某个信息...

    PLSQL Developer 7.1.5

     对象浏览器——可配置的树形浏览能够显示同PL/SQL开发相关的全部信息,使用该浏览器可以获取对象描述、浏览对象定义、创建测试脚本以便调试、使能或禁止触发器或约束条件、重新编译不合法对象、查询或编辑表格、...

    Sqlserver2000经典脚本

    基本方法.sql │ ├─第08章 │ │ 8.1.2 树形数据分级汇总示例.sql │ │ 8.1.3 树形数据编号重排的通用存储过程.sql │ │ 8.1.3 树形数据编号重排示例.sql │ │ 8.1.4 实现编码规则...

    经典SQL脚本大全

    │ │ 8.1.2 树形数据分级汇总示例.sql │ │ 8.1.3 树形数据编号重排的通用存储过程.sql │ │ 8.1.3 树形数据编号重排示例.sql │ │ 8.1.4 实现编码规则调整处理的通用存储过程.sql │ │ 8.1.4 生成编码规则调整...

    DBA面试常见题目

    - **B-Tree Index**: 基于B树结构构建,支持范围查询、排序等功能。 - **Bitmap Index**: 用于低基数列,如性别、状态等字段,存储方式为位图形式。 - **Function Index**: 允许在表达式上创建索引,提高了查询性能...

    PLSQL Developer(免安装、汉化版,很好用的) 8.0.3.1510.rar

     对象浏览器——可配置的树形浏览能够显示同PL/SQL开发相关的全部信息,使用该浏览器可以获取对象描述、浏览对象定义、创建测试脚本以便调试、使能或禁止触发器或约束条件、重新编译不合法对象、查询或编辑表格、...

    PL/SQL Developer v8.0.zip

    对象浏览器——可配置的树形浏览能够显示同PL/SQL开发相关的全部信息,使用该浏览器可以获取对象描述、浏览对象定义、创建测试脚本以便调试、使能或禁止触发器或约束条件、重新编译不合法对象、查询或编辑表格、浏览...

Global site tag (gtag.js) - Google Analytics