• Oracle 11g Release 1 (11.1) SQL_层级查询(概)


    本文内容

    • 演示层级查询
    • 层级查询(Hierarchical Queries)
    • 参考

    演示层级查询

    了解层级查询的意义在于,可以省去程序的递归代码。写递归总是很烦人。

    假设在 Oracle 的 scott 用户下,用 EMP 表演示层级查询。该表包含某个员工及其上级。全部内容如下:

    EMP 表

    职位最高的当然是主席 PRESIDENT

    然后是经理 MANAGER

    其次是分析师 ANALYST

    最后是营业员 CLEAK 和销售人员 SALESMAN

    示例 1:演示员工编号为 7566 的员工及其所有下属。

    select t.empno as 员工编号,
           t.ename as 员工姓名,
           t.job as 职位,
           t.mgr as 上级编号,
           level
      from emp t
     start with t.empno = 7566
    connect by prior t.empno = t.mgr;

    演示员工编号为 7566 的员工及其所有下属。

    示例 2:演示员工编号为 7566 的所有下属。

    select t.empno as 员工编号,
           t.ename as 员工姓名,
           t.job   as 职位,
           t.mgr   as 上级编号
      from emp t
     start with t.mgr = 7566
    connect by prior t.empno = t.mgr;

    演示员工编号为 7566 的所有下属。

    示例 3:演示员工编号为 7876 员工及其所有上级。

    select t.empno as 员工编号,
           t.ename as 员工姓名,
           t.job   as 职位,
           t.mgr   as 上级编号
      from emp t
     start with t.empno = 7876
    connect by prior t.mgr = t.empno;

    演示员工编号为 7876 员工及其所有上级。

    从上面演示可以看出,层级查询既可以“向下”查询,也可以“向上”查询,类似“递归”。

    • 示例 1 所示,“向下找”,则

    start with t.empno = 7566 指定根节点;而 connect by prior t.empno = t.mgr 指定节点的关系,上级编号等于当前的员工编号。

    • 示例 3 所示,“向上找”,则

    start with t.empno = 7876 指定根节点;而 connect by prior t.mgr = t.empno 指定节点的关系。员工编号等于当前员工的上级编号。

    其实,connect by prior 表面“递归”的方向。如下图所示。

    7

    • 若“向上找”,如节点 7 开始,则从节点 7 开始,所有父节点为 7 的节点,递归;
    • 若“向下找”,如节点 11 开始,则从节点 11 开始,所有节点为 11 的父节点,递归。

    层级查询

    以上仅仅是层级查询比较简单的应用。若一个表包含层级数据,则可以使用层级查询子句,以层级顺序来获得数据行。如下图所示层级查询子句的语法。
    hierarchical_query_clause::=

    未命名

    START WITH 指定层级的根行(顶级数据行)。
    CONNECT BY 指定父数据行与子数据行的层级关系。

    PRIOR 是一个二元运算符,与 + 和 - 数学运算符的优先级相同。它计算层级查询中当前行的紧随父行的表达式。PRIOR 通常用在等值操作符来比较列的值。该关键字可以用在运算符的任何一边。

    参考

  • 相关阅读:
    tty 与 多任务的解释备忘
    Oracle 安装时候的fs.filemax参数
    100多个Web2.0在线生成器
    精心整理的微软原版光盘
    WEB3.0开启商务魔法时代
    VBO与Displaylists的进一步讨论 (转)
    基于UML和ASP.NET实现三层B/S结构系统开发(转)
    BYTE* To Float*
    COM高手总结的八个经验和教训(转)
    OpenGL: 3D坐标到屏幕坐标的转换逻辑(gluProject的实现)(转)
  • 原文地址:https://www.cnblogs.com/liuning8023/p/2545655.html
Copyright © 2020-2023  润新知