ITPub博客

首页 > Linux操作系统 > Linux操作系统 > connect by..start with..

connect by..start with..

原创 Linux操作系统 作者:尛样儿 时间:2010-02-03 10:33:46 0 删除 编辑

1、格式化层次化查询的结果:(level伪列,显示显示树中的层次数)

select level,LPAD(' ',5*level-1) || first_name || ' ' || last_name
as employee
from more_employees
start with employee_id=1
connect by prior employee_id=manager_id;

查询结果:

   level      employee

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

1    1     James Smith
2    2          Ron Johnson
3    3               Fred Hobbs
4    3               Rob Green
5    2          Susan Jones
6    3               Jane Brown
7    4                    Henry Heyson
8    3               John Grey
9    4                    Jean Blue
10  2          Kevin Black
11  3               Keith Long
12  3               Frank Howard
13  3               Doreen Penn

通过查看格式化之后的结果、员工关系一目了然。

 

2、start with句子中使用子查询

select level,LPAD(' ',5*level-1) || first_name || ' ' || last_name
as employee
from more_employees
start with employee_id=(
select employee_id from more_employees
where first_name='Susan' and last_name='Jones'
)
connect by prior employee_id=manager_id;

查询结果:

level    employee

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

   1     Susan Jones
   2          Jane Brown
   3               Henry Heyson
   2          John Grey
   3               Jean Blue

3、从下向上遍历树

select level,LPAD(' ',5*level-1) || first_name || ' ' || last_name
as employee
from more_employees
start with employee_id=(
select employee_id from more_employees
where first_name='Susan' and last_name='Jones'
)
connect by prior manager_id=employee_id;

查询结果:

1 1     Susan Jones
2 2          James Smith

 

4、子查询中删除节点和分支

select level,LPAD(' ',5*level-1) || first_name || ' ' || last_name
as employee
from more_employees
where last_name !='Johnson'
start with employee_id=1
connect by prior employee_id=manager_id;

1 1     James Smith
2 3               Fred Hobbs
3 3               Rob Green
4 2          Susan Jones
5 3               Jane Brown
6 4                    Henry Heyson
7 3               John Grey
8 4                    Jean Blue
9 2          Kevin Black
10 3               Keith Long
11 3               Frank Howard
12 3               Doreen Penn

查询结果:Ron Johnson已清除,但它的下属Rob Green 、Fred Hobbs仍存在,

可以再connect by prior使用and子句将 将其Ron Johnson下属从结果中除去:

select level,LPAD(' ',5*level-1) || first_name || ' ' || last_name
as employee
from more_employees
start with employee_id=1
connect by prior employee_id=manager_id and last_name !='Johnson';

 

查询结果:

1 1     James Smith
2 2          Susan Jones
3 3               Jane Brown
4 4                    Henry Heyson
5 3               John Grey
6 4                    Jean Blue
7 2          Kevin Black
8 3               Keith Long
9 3               Frank Howard
10 3               Doreen Penn

 

 

 

 

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/23135684/viewspace-626702/ ,如需转载,请注明出处,否则将追究法律责任。

下一篇: 参数OPEN_CURSOR
请登录后发表评论 登录
全部评论
Oracle数据库管理员,Oracle数据库系统构架员;2012年7月出版《构建最高可用Oracle数据库系统:Oracle 11gR2 RAC管理、维护与性能优化》一书;Oracle 10g OCM。

注册时间:2010-01-05

  • 博文量
    483
  • 访问量
    5650671