一般用来得到含有层次结构的数据(比如tree)。
SELECT employee_id, last_name, manager_id
FROM employees
CONNECT BY PRIOR employee_id = manager_id;EMPLOYEE_ID LAST_NAME MANAGER_ID
----------- ------------------------- ----------
101 Kochhar 100
108 Greenberg 101
109 Faviet 108
110 Chen 108
111 Sciarra 108
112 Urman 108
113 Popp 108
......-------------------------------
SELECT employee_id, last_name, manager_id, LEVEL
FROM employees
CONNECT BY PRIOR employee_id = manager_id;
EMPLOYEE_ID LAST_NAME MANAGER_ID LEVEL
----------- ------------------------- ---------- ----------
101 Kochhar 100 1
108 Greenberg 101 2
109 Faviet 108 3
110 Chen 108 3
111 Sciarra 108 3
112 Urman 108 3
113 Popp 108 3
....
SELECT employee_id, last_name, manager_id
FROM employees
CONNECT BY PRIOR employee_id = manager_id;EMPLOYEE_ID LAST_NAME MANAGER_ID
----------- ------------------------- ----------
101 Kochhar 100
108 Greenberg 101
109 Faviet 108
110 Chen 108
111 Sciarra 108
112 Urman 108
113 Popp 108
......-------------------------------
SELECT employee_id, last_name, manager_id, LEVEL
FROM employees
CONNECT BY PRIOR employee_id = manager_id;
EMPLOYEE_ID LAST_NAME MANAGER_ID LEVEL
----------- ------------------------- ---------- ----------
101 Kochhar 100 1
108 Greenberg 101 2
109 Faviet 108 3
110 Chen 108 3
111 Sciarra 108 3
112 Urman 108 3
113 Popp 108 3
....
比如你有部门信息表
dept(
deptno 部门号
deptname 部门名称
mgrno 上级部门
)
有如下记录
deptno , deptname , mgrno
1 总公司 null
2 上海分公司 1
3 浙江分公司 1
4 杭州分公司 3
...你想查询总公司下所有的分公司,可以使用如下语句
select * , level from dept connect by PRIOR deptno = mgrno ;
显示:
deptno , deptname , mgrno , level
1 总公司 null 1
2 上海分公司 1 2
3 浙江分公司 1 2
4 杭州分公司 3 3
...你想查询浙江分公司下所有的分公司,可以使用如下语句
select * , level from dept start with deptno = 3 connect by connect by PRIOR deptno = mgrno ;
3 浙江分公司 1 1
4 杭州分公司 3 2
create table Dept(
DepartNO varchar2(10),
DepartName varchar2(20),
TopNo varchar2(10));insert into Dept values('001','董事会','0');
insert into Dept values('002','总裁办','001');
insert into Dept values('003','财务部','001');
insert into Dept values('004','市场部','002');
insert into Dept values('005','公关部','002');
insert into Dept values('006','销售部','002');
insert into Dept values('007','分销处','006');
insert into Dept values('008','业务拓展处','004');
insert into Dept values('009','销售科','007');CREATE TABLE TempDept
(
TempdeptNo char(4), /*部门编号*/
TempdeptName varchar2(20), /*部门名称*/
UpperTempdeptNo char(4), /*上级部门编号*/
UpperTempdeptName varchar2(20), /*上级部门名称*/
TempdeptLevel number(4) /*部门所处的级别*/
);select departname
from dept
connect by prior departno=topno
start with topno='0';