oracle层次查询

今天把好久不用的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 为空的结点开始查”

当然不使用层也可以实现,但是效率没有层次高。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值