ORACLE遞迴查詢遍歷詳解

2021-08-31 01:56:56 字數 2383 閱讀 5021

oracle 實在太強了,本篇文章詳細介紹了oracle的遞迴查詢語法,利用此語法,可以方便地實現遞迴的雙向查詢:

-- tirle : recursion query for tree with "connect by/start with"

-- author : rake gao

-- create date : 2005-08-22

-- version : 2.0

-- last modify : 2005-08-22

目 錄一、測試準備

二、實現各種查詢要求

三、要點總結

正 文一、測試準備

1、先假設有如下部門結構。

2 34 5 6 7 8

2、然後建立測試表和資料。

drop table t_dept_temp;

create table t_dept_temp(

dept_id number(2) not null,

parent_id number(2) ,

dept_name varchar2(10) ,

amount number(3) --人數

delete t_dept_temp;

insert into t_dept_temp (dept_id,parent_id,dept_name,amount) values (1,null,'1' ,2);

insert into t_dept_temp (dept_id,parent_id,dept_name,amount) values (2,1 ,'1-2' ,15);

insert into t_dept_temp (dept_id,parent_id,dept_name,amount) values (3,1 ,'1-3' ,8);

insert into t_dept_temp (dept_id,parent_id,dept_name,amount) values (4,2 ,'1-2-4',10);

insert into t_dept_temp (dept_id,parent_id,dept_name,amount) values (5,2 ,'1-2-5',9);

insert into t_dept_temp (dept_id,parent_id,dept_name,amount) values (6,3 ,'1-3-6',17);

insert into t_dept_temp (dept_id,parent_id,dept_name,amount) values (7,3 ,'1-3-7',5);

insert into t_dept_temp (dept_id,parent_id,dept_name,amount) values (8,3 ,'1-3-8',6);

commit;

sql> select * from t_dept_temp;

dept_id parent_id dept_name amount

1 1 2

2 1 1-2 15

3 1 1-3 8

4 2 1-2-4 10

5 2 1-2-5 9

6 3 1-3-6 17

7 3 1-3-7 5

8 3 1-3-8 6

3、調整一下輸出格式

col dept_id format a10;

二、接下來實現各種查詢要求

1、部門2及其所有下級部門。

select lpad(' ',2*(level - 1), ' ')||dept_id as dept_id,

parent_id,dept_name,amount

from t_dept_temp

connect by parent_id = prior dept_id -- 找出所有parent_id等於當前記錄dept_id的記錄。

start with dept_id = 2 -- 從部門2開始遞迴查詢。

dept_id parent_id dept_name amount

2 1 1-2 15

4 2 1-2-4 10

5 2 1-2-5 9

2、部門4及其所有上級部門

select lpad(' ',2*(level - 1), ' ')||dept_id as dept_id,

parent_id,dept_name,amount

from t_dept_temp

connect by prior parent_id = dept_id -- 找出所有dept_id等於當前記錄parent_id的記錄

start with dept_id = 4 -- 從部門4開始遞迴查詢。

dept_id parent_id dept_name amount

4 2 1-2-4 10

2 1 1-2 15

1 1 2

map常用操作 添入 刪除 查詢 遍歷

map添入元素 1 利用pairmapma ma.insert pair 2,liming 或者ma.insert make pair 2,liming 2 利用map的value typemapma ma.insert map value type 2,liming 3 利用陣列mapma ma ...

查詢 遍歷遊戲物體的常用方法

下面是查詢 遍歷遊戲物體的常用方法及說明 方法說明 gameobject.find 名字 根據名字查詢場景中的物體,例如 gameobject obj gameobject.find thetank gameobject.findgameobjectwithtag 標籤 根據標籤查詢場景中的物體,例...

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