by connect nocycle oracle_oracle_connect_by使用详解

connect by

使用详解

/*START WITH

表示递归的种子,而

CONNECT BY

描述递归步骤,

也就是如何从第

n

步发展到第

(n + 1)

步。由于在归结

name

时需要区分第

n

步和第

(n + 1)

步,因此使用

PRIOR

来表明

empid

属于第

n

步,而

mgrid

属于第

(n + 1)

步。在第

1

步,

empid

16

mgrid

也必须是

16

,因此第

2

步产生

„Scott‟

„Henry‟

„Zander‟

。他们的

empid

将作为第

3

步的

PRIOR

依此类推。

*/

select ename,job

,ename

from scott.emp emp

start with ename in ('WARD')

connect by empno = prior mgr;

/*LEVEL

伪列

最常见的伪列是

LEVEL

。这个列的作用是表明产生行的递归步骤

n

属于第几步。

在这个例子中,它表示

„Goyal‟

与雇员之间相差的管理等级加

1

(因为

LEVEL

一开始为

1

)

下面是原先的

Oracle

例子添加了

LEVEL

列之后的样子:

*/

select level,ename,job

from scott.emp emp

start with ename in ('WARD','SMITH','ADAMS')

connect by empno = prior mgr;

/*

CONNECT_BY_ROOT

表达式

CONNECT_BY_ROOT

作用在一个列上,并返回当前行最早的(

root

)祖先的值。

*/

select connect_by_root ename as root

,ename

from scott.emp emp

start with ename in ('WARD','SMITH','ADAMS')

connect by empno = prior mgr;

/*SYS_CONNECT_BY_PATH()

过程

运行查询时一个常见的问题是:

这个元素与递归的开始有怎样的关系?

或者换句话说,

这一行的祖先是什么?

Oracle

中,

可以使用

SYS_CONNECT_BY_PATH()

来连接来自每个递归步骤的值,

从而形成一个祖先路径。看看下面这个著名的例子,

它展示了

„ADAMS‟

每个下属的

从属

链:

*/

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值