oracle subquery是什么,Oracle11gR2RSF(RecuriveSubqueryfactoring)-Oracle

Oracle11gR2RSF(RecuriveSubqueryfactoring),在Oracle 11gR2之前,一般用start with和connect by来递归的显示树形结构,请看如下脚本

select lpad(‘ ‘,2*level-1,’ ‘) || ename ename,empno,mgr

from emp

where empno is not null

connect by prior empno = mgr

start with mgr is null

ENAME EMPNO MGR

——————– ———- ———-

KING 7839

JONES 7566 7839

SCOTT 7788 7566

ADAMS 7876 7788

FORD 7902 7566

SMITH 7369 7902

BLAKE 7698 7839

ALLEN 7499 7698

WARD 7521 7698

MARTIN 7654 7698

TURNER 7844 7698

JAMES 7900 7698

CLARK 7782 7839

MILLER 7934 7782

从11gR2开始,可以用RSF来实现

with sun(lvl,ename,empno,mgr) as

(select 1,lpad(‘ ‘,2*1-1,’ ‘) || ename ename,empno,mgr from emp where mgr is null

union all

select sun.lvl+1,lpad(‘ ‘,2*lvl-1,’ ‘) || d.ename ename,d.empno,d.mgr

from sun, emp d

where sun.empno = d.mgr)

select lvl,ename,empno,mgr from sun

LVL ENAME EMPNO MGR

———- ——————– ———- ———-

1 KING 7839

2 JONES 7566 7839

2 BLAKE 7698 7839

2 CLARK 7782 7839

3 ALLEN 7499 7698

3 WARD 7521 7698

3 MARTIN 7654 7698

3 SCOTT 7788 7566

3 TURNER 7844 7698

3 JAMES 7900 7698

3 FORD 7902 7566

3 MILLER 7934 7782

4 SMITH 7369 7902

4 ADAMS 7876 7788

观察一下上述两份输出,用传统的start with和connect by,结果顺序类似于对emp表的前序遍历(preorder traversal);而使用RSF,则是对emp表的层次遍历(level traversal)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值