oracle conn.,Oracle connect by

oracle中 connect by prior 递归算法

1

CONNECT BY子句说明每行数据将是按层次顺序检索,并规定将表中的数据连入树型结构的关系中。PRIORY运算符必须放置在连接关系的两列中某一个的前面。对于节点间的父子关系,PRIOR运算符在一侧表示父节点,在另一侧表示子节点,从而确定查找树结构是的顺序是自顶向下还是自底向上。在连接关系中,除了可以使用列名外,还允许使用列表达式。START WITH 子句为可选项,用来标识哪个节点作为查找树型结构的根节点。若该子句被省略,则表示所有满足查询条件的行作为根节点。

2

prior运算符必须放置在连接关系的两列中某一个的前面。prior运算符在一侧表示父节点,在另一侧表示子节点,从而确定查找树结构是的顺序是自顶向下还是自底向上。

PRIOR被置于CONNECT BY子句中等号的前面时,则强制从根节点到叶节点的顺序检索,即由父节点向子节点方向通过树结构,我们称之为自顶向下的方式。如:

CONNECT BY PRIOR EMPNO=MGR

PIROR运算符被置于CONNECT BY 子句中等号的后面时,则强制从叶节点到根节点的顺序检索,即由子节点向父节点方向通过树结构,我们称之为自底向上的方式。例如:

CONNECT BY EMPNO=PRIOR MGR

在这种方式中也应指定一个开始的节点。

3

start with子句为可选项,用来标识哪个节点作为查找树型结构的根节点。若该子句被省略,则表示所有满足查询条件的行作为根节点。START WITH: 不但可以指定一个根节点,还可以指定多个根节点。

4

使用LEVEL,在具有树结构的表中,每一行数据都是树结构中的一个节点,由于节点所处的层次位置不同,所以每行记录都可以有一个层号。层号根据节点与根节点的距离确定。不论从哪个节点开始,该起始根节点的层号始终为1,根节点的子节点为2, 依此类推。

Syntax 1 CONNECT BY [NOCYCLE]  START WITH

Syntax 2 START WITH  CONNECT BY [NOCYCLE]

SQL> select level,empno,ename,mgr from emp start with empno=7566 connect by prior empno=mgr;

LEVEL      EMPNO ENAME             MGR

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

1       7566 JONES            7839

2       7788 SCOTT            7566

3       7876 ADAMS            7788

2       7902 FORD             7566

3       7369 SMITH            7902

SQL> select level,empno,ename,mgr from emp start with empno=7566 connect by prior mgr=empno;

LEVEL      EMPNO ENAME             MGR

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

1       7566 JONES            7839

2       7839 KING

通过connect by构造数据

SQL> select level,rownum,rowid from dual connect by rownum<=5;

LEVEL     ROWNUM ROWID

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

1          1 AAAAB0AABAAAAOhAAA

2          2 AAAAB0AABAAAAOhAAA

3          3 AAAAB0AABAAAAOhAAA

4          4 AAAAB0AABAAAAOhAAA

5          5 AAAAB0AABAAAAOhAAA

SQL> select level,rownum,rowid from dual connect by level<=5;

LEVEL     ROWNUM ROWID

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

1          1 AAAAB0AABAAAAOhAAA

2          2 AAAAB0AABAAAAOhAAA

3          3 AAAAB0AABAAAAOhAAA

4          4 AAAAB0AABAAAAOhAAA

5          5 AAAAB0AABAAAAOhAAA

例如:

SQL> create table test as select level as id,level*10000 as sal from dual connect by level<=5;

表已创建。

SQL> select * from test;

ID        SAL

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

1      10000

2      20000

3      30000

4      40000

5      50000

欢迎关注我的微信公众号"IT小Chen",共同学习,共同成长!!!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值