oracle樹中prior的用法

2021-08-28 06:30:29 字數 3647 閱讀 1284

資料說明一切:

create

table dept(deptno number,deptname varchar2(20)

,mgrno number)

;insert

into dept values(1

,'總公司'

,null);

insert

into dept values(2

,'浙江分公司',1

);insert

into dept values(3

,'杭州分公司',2

);commit

;select t.

*from dept t;

deptno deptname mgrno

11 總公司

22 浙江分公司 1

33 杭州分公司 2

select

*from dept connect

by prior mgrno=deptno ;

--以子結點為開始向根結點遍歷

deptno deptname mgrno

11 總公司

22 浙江分公司 1

31 總公司

43 杭州分公司 2

52 浙江分公司 1

61 總公司

select

*from dept start

with mgrno=

1connect

by prior mgrno=deptno ---以子結點為開始且開始為1,的遍歷

deptno deptname mgrno

12 浙江分公司 1

21 總公司

select

from dept connect

by prior deptno= mgrno

deptno deptname mgrno

12 浙江分公司 1

23 杭州分公司 2

33 杭州分公司 2

41 總公司

52 浙江分公司 1

63 杭州分公司 2

select

*from dept start

with mgrno=

1connect

by prior deptno= mgrno

deptno deptname mgrno

12 浙江分公司 1

23 杭州分公司 2

1)prior放在子節點端,則表示掃瞄樹是以start with指定的節點作為根節點從上往下掃瞄。可能對應乙個或多個分支。

start with可以省略,如果省略,表示對所有節點都當成根節點分別進行遍歷

2)prior放在父節點端,則表示掃瞄樹是以start with指定的節點作為最低層子節點,從下往上掃瞄。順序是子節點往父節點掃瞄,直到根節點為止,這種情況只能得到乙個分支。

start with可以省略,如果省略,表示對所有節點都當成最低層子節點分別往根節點方向遍歷

最後會了上面大家應該知道下面sys_connect_path()

sys_connect_by_path函式主要作用是可以把乙個父節點下的所有子節點通過某個字元進行區分,然後連線在乙個列中顯示:

select

/* max(substr(*/sys_connect_by_path(deptname,

',')

/*,2))*/

from dept connect

by prior deptno= mgrno;

sys_connect_by_path(deptname,'

1,浙江分公司

2,浙江分公司,杭州分公司

3,杭州分公司

4,總公司

5,總公司,浙江分公司

6,總公司,浙江分公司,杭州分公司

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

select

*from persons.dept start

with deptid=

76connect

by prior paredeptid=deptid

通過根節點遍歷子節點(不包含根節點).

select

*from persons.dept start

with paredeptid=

0connect

by prior deptid=paredeptid

通過根節點遍歷子節點(包含根節點).

select

*from persons.dept start

with deptid=

0connect

by prior deptid=paredeptid

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

select a.*,

level

from persons.dept a start

with paredeptid=

0connect

by prior deptid=paredeptid

start with ...connect by的用法,start with後面所跟的就是就是遞迴的種子。

遞迴的種子也就是遞迴開始的地方connect by後面的"prior" 如果預設:則只能查詢到符合條件的起始行,並不進行遞迴查詢;

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

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

select first_value(deptid)

over

(order

bylevel

desc

rows

unbounded

preceding

)as firstdeptid from persons.dept start

with deptid=

76connect

by prior paredeptid=deptid

表結構

deptid         paredeptid                  name

number number char

(40 byte)

部門id 父部門id(所屬部門id) 部門名稱

oracle樹中prior的用法

oracle中 從子節點查詢,直到根節點的乙個分支 或者從根節點查詢,知道字節點的許多分支 可以用proir 總結 1 prior放在子節點端,則表示掃瞄樹是以start with指定的節點作為根節點從上往下掃瞄。可能對應乙個或多個分支。start with可以省略,如果省略,表示對所有節點都當成根...

ORACLE中的( )怎麼用

分享 2011 02 15 10 03 為女兒而奮鬥 瀏覽 19788 次 oracle 2011 02 15 10 12 提問者採納 就是連線 譬如select a.b.from a b就是乙個右連線,等同於select a.b.from a right join b select a.b.fro...

oracle中的sql用遞迴查詢樹格式資料

1.查詢當前節點的子類 with cte child grid id,grid name,parent grid code as 起始條件 select grid id,grid name,parent grid code from t sg grid where grid id 2 列出父節點查詢...