Oracle遞迴查詢

2021-09-26 20:16:37 字數 4053 閱讀 2778

建表語句:

create

table

sc_district

( id

number(10) not

null

, parent_id

number(10

), name

varchar2(255 byte) not

null

);alter

table sc_district add(

constraint

sc_district_pk

primary

key(id));

alter

table sc_district add(

constraint

sc_district_r01

foreign

key(parent_id)

references sc_district (id));

插入資料:

insert

into sc_district(id,name) values(1,'

四川省'

);insert

into sc_district(id,parent_id,name) values(2,1,'

巴中市'

);insert

into sc_district(id,parent_id,name) values(3,1,'

達州市'

); insert

into sc_district(id,parent_id,name) values(4,2,'

巴州區'

);insert

into sc_district(id,parent_id,name) values(5,2,'

通江縣'

);insert

into sc_district(id,parent_id,name) values(6,2,'

平昌縣'

);insert

into sc_district(id,parent_id,name) values(7,3,'

通川區'

);insert

into sc_district(id,parent_id,name) values(8,3,'

宣漢縣'

);insert

into sc_district(id,parent_id,name) values(9,8,'

塔河鄉'

);insert

into sc_district(id,parent_id,name) values(10,8,'

三河鄉'

);insert

into sc_district(id,parent_id,name) values(11,8,'

胡家鎮'

);insert

into sc_district(id,parent_id,name) values(12,8,'

南壩鎮');

insert

into sc_district(id,parent_id,name) values(13,6,'

大寨鄉'

);insert

into sc_district(id,parent_id,name) values(14,6,'

響灘鎮'

);insert

into sc_district(id,parent_id,name) values(15,6,'

龍崗鎮'

);insert

into sc_district(id,parent_id,name) values(16,6,'

白衣鎮');

生成表如下:

查詢巴中市下面的所有行政組織(結果包含當前節點):

select

*from

sc_district

start

with name=

'巴中市

'connect

by prior id=

parent_id

查詢結果:

id parent_id name21

巴中市4

2巴州區52

通江縣6

2平昌縣136

大寨鄉14

6響灘鎮156

龍崗鎮16

6 白衣鎮

查詢響灘鎮鎮所屬的市:

select

id, parent_id, name,

connect_by_root(id) city_id,

connect_by_root(name) city_name

from

sc_district

where name=

'響灘鎮

'start

with parent_id=

1connect

by prior id=

parent_id

查詢結果:

id parent_id name city_id city_name

146 響灘鎮 2 巴中市

level

:查詢節點層次,從1開始。

connect_by_isleaf:查詢節點是否是葉子節點,是則為1,不是則為0

select id, name, parent_id, level

, connect_by_isleaf

from

sc_district

start

with name=

'巴中市

'connect

by prior id=

parent_id

order

byid;

查詢結果:

id name parent_id

level

connect_by_isleaf

2 巴中市 110

4 巴州區 221

5 通江縣 221

6 平昌縣 220

13 大寨鄉 631

14 響灘鎮 631

15 龍崗鎮 631

16 白衣鎮 6

31

查詢巴中市下行政組織遞迴路徑

select

id, name, parent_id,

substr(sys_connect_by_path(name,

'->

'),3

) name_path

from

sc_district

start

with name=

'巴中市

'connect

by prior id=

parent_id

查詢結果:

id name parent_id name_path

2 巴中市 1

巴中市4 巴州區 2 巴中市->

巴州區5 通江縣 2 巴中市->

通江縣6 平昌縣 2 巴中市->

平昌縣13 大寨鄉 6 巴中市->平昌縣->

大寨鄉14 響灘鎮 6 巴中市->平昌縣->

響灘鎮15 龍崗鎮 6 巴中市->平昌縣->

龍崗鎮16 白衣鎮 6 巴中市->平昌縣->白衣鎮

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...