Oracle Handbook系列之一:结构化查询(Hierarchical Queries)

来源:Oracle认证    发布时间:2012-11-12    Oracle认证视频    评论

1 2 3 4 5 6 下一页

一)准备测试数据

闲话少说,直入正题。建立一张简单的职工表 t_hierarchical:

|-Emp 职工编号

|-Mgr  职工的直接上司(Mgr本身也是职工)

|-Emp_name 职工姓名

插入一些测试数据,除了大老板AA,其它的职工都各有自己的Manager。

select emp, mgr, emp_name from t_hierarchical t;

1            AA

2     1     BB

3     2     CC

4     3     DD

5     2     EE

6     3     FF

二)CONNECT BY

select emp, mgr, LEVEL from t_hierarchical t    CONNECT BY PRIOR emp=mgr    order by emp;

1            1

2     1     2

2     1     1

3     2     1

3     2     3

3     2     2

4     3     4

4     3     1

4     3     2

4     3     3

5     2     3

5     2     2

5     2     1

6     3     2

6     3     3

6     3     4

6     3     1

解释一下,CONNECT BY用于指定父-子记录的关系(PRIOR我们在下例中解释,更直观一些)。举emp 2为例,他隶属于emp 1,如果我们以emp 1为根节点,显然LEVEL=2;以emp 2自身为根节点,则LEVEL=1,这就是为什么上述查询结果中出现共色标识部分那两行记录,其它的类推。

三)START WITH

通常我们需要更直观、更具有实用性的结果,这需要用到结构化查询中的START WITH子句,用于指定根节点:

select emp, mgr, LEVEL from t_hierarchical t    START WITH emp=1    CONNECT BY PRIOR emp=mgr;

1            1

2     1     2

3     2     3

4     3     4

6     3     4

5     2     3

这里我们指定了根节点是emp 1,这样的结果直观了许多,例如,以emp 1为根节点,那么emp 3位于第三级(emp 1—emp 2—emp 3),这里补充一下 PRIOR 关键字的说明,个人观点:“PRIOR emp=mgr”表示前一条记录的emp编号 = 当前记录的mgr编号,从查询结果中可以看出这一点。同时,从查询结果中还能发现明显的递归痕迹,参见不同颜色标识的数字。

上一篇: 教你在Windows XP中彻底删除Oracle
下一篇: oracle SID修改方式详解

1 2 3 4 5 6 下一页

视频学习

我考网版权与免责声明

① 凡本网注明稿件来源为"原创"的所有文字、图片和音视频稿件,版权均属本网所有。任何媒体、网站或个人转载、链接转贴或以其他方式复制发表时必须注明"稿件来源:我考网",违者本网将依法追究责任;

② 本网部分稿件来源于网络,任何单位或个人认为我考网发布的内容可能涉嫌侵犯其合法权益,应该及时向我考网书面反馈,并提供身份证明、权属证明及详细侵权情况证明,我考网在收到上述法律文件后,将会尽快移除被控侵权内容。

最近更新

社区交流

考试问答