--使用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;


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

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

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

--在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;

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

--從層次化查詢中刪除節點
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;

--上面的查詢雖然刪除了節點但是並沒有刪除該節點的分支,為了連同分支也一併刪除,在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';

--在層次化查詢中加入其它條件
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;

connect by和strart with子句的更多相关文章

  1. Oracle学习之start with...connect by子句的用法

    转自:http://www.blogjava.net/xzclog/archive/2010/03/05/314642.html,多谢博主分享 Oracle中start with…connect by ...

  2. Oracle 之 树查询 START WITH ... CONNECT BY ...子句

    START WITH ... CONNECT BY ...子句是结构化查询中用到的,其基本语法是: select … from tablename start with 条件1 connect by ...

  3. Oracle中start with...connect by/start with…connect by prior子句的用法

    connect by 是结构化查询中用到的,其基本语法是:select … from tablenamestart with 条件1connect by 条件2where 条件3;例:select * ...

  4. Oracle中start with...connect by (prior)子句的用法

    connect by 是结构化查询中用到的,基本语法是:select … from tablenamestart with 条件1connect by 条件2where 条件3; 例:select * ...

  5. Start with connect by prior 递归查询

    在SELECT命令中使用CONNECT BY和START WITH子句可以查询表中的树型结构关系.其命令格式如下: SELECT * from CONNECT BY {PRIOR列名1=列名2|列名1 ...

  6. oracle分层查询中的start with和connect by(树结构查询)

    来源:  http://blog.csdn.net/itmyhome1990/article/details/16338637   ORACLE是一个关系数据库管理系统,它用表的形式组织数据,在某些表 ...

  7. Oracle “CONNECT BY” 使用 [转]

    Oracle “CONNECT BY”是层次查询子句,一般用于树状或者层次结果集的查询.其语法是: 1 [ START WITH condition ]2 CONNECT BY [ NOCYCLE ] ...

  8. PLSQL_基础系列11_递归和层次查询CONNECT BY(案例)

    2015-05-31 Created By BaoXinjian

  9. oracle中 connect by prior 递归算法 -- 理解

    oracle中 connect by prior 递归算法 -- 理解 http://blog.163.com/xxciof/blog/static/7978132720095193113752/  ...

随机推荐

  1. 在Asp.Net Core中使用Session

    1.在Stratup.cs中配置Session public void ConfigureServices(IServiceCollection services) { services.AddSes ...

  2. (转)Python中如何理解if __name__ == '__main__'

    摘要 通俗的理解 __name__ == '__main__' :假如你叫李凯.py,在朋友眼中,你是李凯( __name__ == '李凯' ):在你自己眼中,你是你自己( __name__ == ...

  3. 【刷题】BZOJ 4817 [Sdoi2017]树点涂色

    Description Bob有一棵n个点的有根树,其中1号点是根节点.Bob在每个点上涂了颜色,并且每个点上的颜色不同.定义一条路 径的权值是:这条路径上的点(包括起点和终点)共有多少种不同的颜色. ...

  4. 九省LNOI2018退役记

    立个flag不会退役. Day 0: 水一发. 大连大学的键盘敲起来就跟敲纸似的. 膜拜要进队的gqh,yxd,sjq. (都进啦2333) (高斯消元,高原反应,分麾下治……) 给我这只弱鸡烧根香. ...

  5. Merge Intervals - LeetCode

    目录 题目链接 注意点 解法 小结 题目链接 Merge Intervals - LeetCode 注意点 区间是无序的 每个区间start一定小于end 解法 解法一:首先以start的值从小到大来 ...

  6. BZOJ2530 [Poi2011]Party 【贪心】

    题目链接 BZOJ2530 题解 如果我们删去一对不连边的仍然存在的点的话,这对点肯定不同时在那个\(\frac{2}{3}n\)的团中,也就是说,每次删点至少删掉一个外点,至多删掉一个内点 那么我们 ...

  7. bzoj 2732 射箭 半平面交

    2732: [HNOI2012]射箭 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 2531  Solved: 848[Submit][Status] ...

  8. 【loj2586】【APIO2018】选圆圈

    题目 有 \(n\) 个圆$c_1,c_2, \cdots , c_n $,执行如下的操作: 找到剩下的半径最大的圆删除并删除所有和它有交的其他并没有被删除的圆: 求每个圆是被那个圆删除的: $1 \ ...

  9. 【线段树合并】【P2824】 [HEOI2016/TJOI2016]排序

    Description 给定一个长度为 \(n\) 的排列,有 \(m\) 次操作,每次选取一段局部进行升序或降序排序,问你一波操作后某个位置上的数字是几 Hint \(1~\leq~n,~m~\le ...

  10. 3:JavaBean,EJB,POJO

    JavaBeanJavaBean是公共Java类,但是为了编辑工具识别,需要满足至少三个条件: 有一个public默认构造器(例如无参构造器,) 属性使用public 的get,set方法访问,也就是 ...