ORACLE 遞迴查詢 選單樹

2021-08-06 03:18:41 字數 3263 閱讀 7167

建立表

建表語句:

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 name

2 1 巴中市

4 2 巴州區

5 2 通江縣

6 2 平昌縣

13 6 大寨鄉

14 6 響灘鎮

15 6 龍崗鎮

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=1

connect by prior id=parent_id

查詢結果:

id parent_id name city_id city_name

14 6 響灘鎮 2 巴中市

?connect by子句偽列的應用

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 by id;

查詢結果:

id name parent_id level connect_by_isleaf

2 巴中市 1 1 0

4 巴州區 2 2 1

5 通江縣 2 2 1

6 平昌縣 2 2 0

13 大寨鄉 6 3 1

14 響灘鎮 6 3 1

15 龍崗鎮 6 3 1

16 白衣鎮 6 3 1

?查詢遞迴路徑

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

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 遞迴查詢 樹查詢

通過根節點遍歷子節點.select level,a.deptproperty,a.from sys org a start with a.parentid 0 connect by prior a.org objid a.parentid 通過子節點獲取頂節點 select first value ...

oracle樹遞迴查詢

通過子節點向根節點追朔.deptid paredeptid name number number char 40 byte 部門id 父部門id 所屬部門id 部門名稱 sql 通過子節點遍歷根節點.select frompersons.deptstartwithdeptid 76connect b...

oracle遞迴查詢 簡單樹查詢

記錄下學習到。從deptid為100的開始往下查詢 即迴圈查詢所有parentid是該記錄deptid的所有記錄 select from dept where start with deptid 100 connect by prior deptid parentid order by deptid...