您的位置:首页 > 数据库 > Oracle

oracle层次查询

2013-05-30 22:57 218 查看
今天把好久不用的oracle基本又重新复习了一下,今天把层次查询回顾一下.

比如要员工表中查询出是老板的员工(从图上可以看出,是老板的员工分别是1,2,3层的king,jones,blank,clark,ford,scott



该表的数据为

 EMPNO ENAME      JOB              MGR

------ ---------- --------- ----------

  7369 SMITH      CLERK           7902

  7499 ALLEN      SALESMAN        7698

  7521 WARD       SALESMAN        7698

  7566 JONES      MANAGER         7839

  7654 MARTIN     SALESMAN        7698

  7698 BLAKE      MANAGER         7839

  7782 CLARK      MANAGER         7839

  7788 SCOTT      ANALYST         7566

  7839 KING       PRESIDENT

  7844 TURNER     SALESMAN        7698

  7876 ADAMS      CLERK           7788

  7900 JAMES      CLERK           7698

  7902 FORD       ANALYST         7566

  7934 MILLER     CLERK           7782

=====================================================

下面进入正题:层次查询是Oracle特有的,1,其中用到关键字 connect ;2,既然是树结构的那么查询的时候就得有个起始顶点。

比如查询出是老板的员工:分析,也就是说empno 要出出在MGR中符合条件。

select level,empno,ename,mgr        (level是Oracle提供的一个列号)

  from emp

 connect by prior empno=mgr
start with mgr is null

 order by 1;(order by 1就是按第一列升序)

结果是

  LEVEL      EMPNO ENAME||'的老板是'||MGR

------- ---------- --------------------------

      1       7839 KING的老板是

      2       7566 JONES的老板是7839

      2       7698 BLAKE的老板是7839

      2       7782 CLARK的老板是7839

      3       7902 FORD的老板是7566

      3       7521 WARD的老板是7698

      3       7900 JAMES的老板是7698

      3       7934 MILLER的老板是7782

      3       7499 ALLEN的老板是7698

      3       7788 SCOTT的老板是7566

      3       7654 MARTIN的老板是7698

      3       7844 TURNER的老板是7698

      4       7876 ADAMS的老板是7788

      4       7369 SMITH的老板是7902

===========================================

connect by prior是oracle固定写法,start with 是指树的哪个顶结点开始查,当然也查整个树中的某一个小分枝。该话我意思就是说“从mgr 为空的结点开始查”

当然不使用层也可以实现,但是效率没有层次高。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Oracle