connect by 是层次查询子句,一般用于树状或层次结果集的查询。
语法:
select ... from table start with 条件1
connect by prior 条件2
where 条件3;
connect by prior 条件2
where 条件3;
其中:
条件1 是根结点的限定语句,当然可以放宽限定条件,以取得多个根结点,实际就是多棵树。
条件2 是连接条件,其中用PRIOR表示上一条记录,比如 CONNECT BY PRIOR org_id = parent_id就是说上一条记录的org_id 是本条记录的parent_id,即本记录的父亲是上一条记录。
条件3 是过滤条件,用于对返回的所有记录进行过滤。
例子:
条件1 是根结点的限定语句,当然可以放宽限定条件,以取得多个根结点,实际就是多棵树。
条件2 是连接条件,其中用PRIOR表示上一条记录,比如 CONNECT BY PRIOR org_id = parent_id就是说上一条记录的org_id 是本条记录的parent_id,即本记录的父亲是上一条记录。
条件3 是过滤条件,用于对返回的所有记录进行过滤。
create table a
(
id number not null, --id
pid number ,-- 父id
name varchar2(20) --名称
)
insert into a values (1,0,"中国")
insert into a values (2,1,"广东")
insert into a values (3,1,"湖南")
insert into a values (4,1,"江苏")
insert into a values (5,2,"深圳")
insert into a values (6,2,"广州")
insert into a values (7,3,"郴州")
sql:
select * from a start with id=1 connect by prior id = pid;
显示结果为数状
id pid name
1 0 中国
2 1 广东
5 2 深圳
6 2 广州
3 1 湖南
7 3 郴州
4 1 江苏