zoukankan      html  css  js  c++  java
  • connect by和strart with子句

    --使用connect by和strart with子句
    SELECT [level],column,expression, ...
    FROM table
    [WHERE where_clause]
    [[START WITH start_condition] [CONNECT BY prior_condition]];

    SELECT  empno,
               mgr,
               ename,
               job
          FROM emp
    START WITH mgr IS NULL
    CONNECT BY PRIOR empno = mgr;

    image
     
    --使用偽列level
    SELECT LEVEL,
               empno,
               mgr,
               ename,
               job
          FROM emp
    START WITH mgr IS NULL
    CONNECT BY PRIOR empno = mgr
      ORDER BY LEVEL, mgr, empno;
      image


    --格式化層次查詢的結果
    SELECT LEVEL,
               empno,
               mgr,
              lpad(' ',2*level-1)||ename as employee,
               job
          FROM emp
    START WITH mgr is null
    CONNECT BY PRIOR empno = mgr;

    image

    --從非根節點開始遍歷
    SELECT LEVEL,
               empno,
               mgr,
               lpad(' ',2*level-1)||ename as employee,
               job
          FROM emp
    START WITH ename like 'JONES'
    CONNECT BY PRIOR empno = mgr;

    image

    --在start with子句中使用子查詢
      SELECT LEVEL,
               empno,
               mgr,
               lpad(' ',2*level-1)||ename as employee,
               job
          FROM emp
    START WITH empno=(select empno from emp where ename='CLARK')
    CONNECT BY PRIOR empno = mgr;

    image

    --向上遍歷
    SELECT LEVEL,
               empno,
               mgr,
               lpad(' ',2*level-1)||ename as employee,
               job
          FROM emp
    START WITH ename like 'JONES'
    CONNECT BY PRIOR mgr=empno;

    image


    --從層次化查詢中刪除節點
    SELECT LEVEL,
               empno,
               mgr,
               lpad(' ',2*level-1)||ename as employee,
               job
          FROM emp
    WHERE ename !='JONES'
    START WITH mgr is null
    CONNECT BY PRIOR empno = mgr;

    image

    --上面的查詢雖然刪除了節點但是並沒有刪除該節點的分支,為了連同分支也一併刪除,在connect by子句中使用and子句
    SELECT LEVEL,
               empno,
               mgr,
               lpad(' ',2*level-1)||ename as employee,
               job
          FROM emp
    START WITH mgr is null
    CONNECT BY PRIOR empno = mgr
    AND  ename !='JONES';

    image

    --在層次化查詢中加入其它條件
    SELECT LEVEL,
               empno,
               mgr,
               lpad(' ',2*level-1)||ename as employee,
               job,
               sal
          FROM emp
    WHERE sal<3000     
    START WITH mgr is null
    CONNECT BY PRIOR empno = mgr;

    image

  • 相关阅读:
    ArcEngine 9.3 学习笔记(九):地图查询(属性查询实例、空间查询实例)
    ArcEngine 9.3 学习笔记(八):地图查询(Cursor对象,QueryFilter对象 和 SpatialFilter对象,SelectionSet要素选择集对象)
    转:Linux常用命令大全(非常全!!!)
    常用的MySQL命令大全
    linux下vi命令修改文件及保存的使用方法
    mysql——初始化和运行
    [转]pycharm的一些快捷键
    录用论文信息
    个人简介+软工五问
    plan
  • 原文地址:https://www.cnblogs.com/guilingyang/p/6367613.html
Copyright © 2011-2022 走看看