oracle的遞迴查詢

2021-08-30 06:03:17 字數 3538 閱讀 1973

start with...

connect

by子句遞迴查詢一般用於乙個表維護樹形結構的應用。

建立示例表:

create table tbl_test (

id    number,

name  varchar2(100 byte),

pid   number                                  default 0 );

插入測試資料:

insert into tbl_test(id,name,pid) values('1','10','0');

insert into tbl_test(id,name,pid) values('2','11','1');

insert into tbl_test(id,name,pid) values('3','20','0');

insert into tbl_test(id,name,pid) values('4','12','1');

insert into tbl_test(id,name,pid) values('5','121','2');

從root往樹末梢遞迴

select * from tbl_test

start with id=1

connect

by prior id = pid

從末梢往樹root遞迴

select * from tbl_test

start with id=5

connect

by prior pid = id

*****

deptid

paredeptid

name

number

number

char (40 byte)

部門id

父部門id(所屬部門id)

部門名稱

通過子節點向根節點追朔.

sql**

select*frompersons.dept startwithdeptid=76connect

by

priorparedeptid=deptid   

sql**

select*frompersons.dept startwithdeptid=76connect

by

priorparedeptid=deptid   

select * from persons.dept start with deptid=76 connect

by prior paredeptid=deptid

通過根節點遍歷子節點.

sql**

select*frompersons.dept startwithparedeptid=0connect

by

priordeptid=paredeptid   

sql**

select*frompersons.dept startwithparedeptid=0connect

by

priordeptid=paredeptid   

select * from persons.dept start with paredeptid=0 connect

by prior deptid=paredeptid

可通過level 關鍵字查詢所在層次.

sql**

selecta.*,level

frompersons.dept a startwithparedeptid=0connect

by

priordeptid=paredeptid   

sql**

selecta.*,level

frompersons.dept a startwithparedeptid=0connect

by

priordeptid=paredeptid   

select a.*,level from persons.dept a start with paredeptid=0 connect

by prior deptid=paredeptid

再次複習一下:start with ...connect

by 的用法,start with

後面所跟的就是就是遞迴的種子

遞迴的種子也就是遞迴開始的地方

connect

by 後面的"prior" 如果預設:則只能查詢到符合條件的起始行,並不進行遞迴查詢;

connect

by prior 後面所放的字段是有關係的,它指明了查詢的方向

練習: 通過子節點獲得頂節點

sql**

selectfirst_value(deptid) over (order

by

level

desc

rowsunbounded preceding)asfirstdeptidfrompersons.dept startwithdeptid=76connect

by

priorparedeptid=deptid  

====這種方法只是當表裡就有一顆樹,多棵樹怎麼辦?

oracle 遞迴查詢 Oracle遞迴查詢

1.1 建立表與插入資料 create table district id number 10 not null,parent id number 10 name varchar2 255 byte not null alter table district add constraint distr...

oracle 逆向遞迴查詢 oracle遞迴查詢

oracle的遞迴查詢 最近在看公司的oa系統,oa系統中基本都會有節點樹,其中對於樹上的資料展示,就是用了資料庫的遞迴查詢,在這裡總結下遞迴查詢。現在存在如下的一棵樹 不會畫樹,將就一下,該樹對應下面建立的表資料。建立如下表 create table dg id number not null,主...

oracle 逆向遞迴查詢 Oracle遞迴查詢

start with.connect by子句遞迴查詢一般用於乙個表維護樹形結構的應用。建立示例表 create table tbl test id number,name varchar2 100 byte pid number default 0 插入測試資料 insert into tbl t...