oracle中查詢樹形數(shù)據(jù)的sql語句
數(shù)據(jù)庫的表中存放樹形數(shù)據(jù)最常用的方式是tb_dept(dept_id,dept_name,parent_id),查詢某個部門的所有子部門,并把結(jié) 果組織成樹形結(jié)構(gòu)是我們經(jīng)常需要解決的一個問題,oracle提供了查詢樹形數(shù)據(jù)的語法。他可以查詢數(shù)中某個節(jié)點的所有子節(jié)點,結(jié)果級按展開一個樹的順序 出現(xiàn),并且可以列出某節(jié)點所處的層,便于我們處理數(shù)據(jù),示例如下:drop table test_dept;
create table test_dept
(dept_id varchar2(20),dept_name varchar2(40),parent_id varchar2(20));
insert into test_dept values ('0','dept1',null);
insert into test_dept values ('1','dept11','0');
insert into test_dept values ('11','dept11','1');
insert into test_dept values ('12','dept12','1');
insert into test_dept values ('2','dept2','0');
insert into test_dept values ('21','dept21','2');
insert into test_dept values ('211','dept211','21');
insert into test_dept values ('212','dept212','21');
insert into test_dept values ('22','dept22','2');
select dept_id,dept_name,level
from test_dept
start with dept_id='0'
connect by prior dept_id=parent_id;
結(jié)果如下:
DEPT_ID DEPT_NAME LEVEL
-------------------- ---------------------------------------- ----------
0 dept1 1
1 dept11 2
11 dept11 3
12 dept12 3
2 dept2 2
21 dept21 3
211 dept211 4
212 dept212 4
22 dept22 3
9 rows selected