Oracle樹結構查詢

2021-05-25 03:02:42 字數 1972 閱讀 5726

oracle樹結構查詢

start with

... connect by用法簡介 

oracle是乙個關聯式資料庫管理系統,它用表的形式組織資料,在某些表中的資料還呈現出

樹型結構的聯絡。例如,我們現在討論雇員資訊表emp,其中含有雇員編號(empno)和

經理(mgr)兩例,通過這兩列反映出來的就是雇員之間領導和被領導的關係。有些僱

員領導另一些雇員,有些雇員被領導,還有些雇員領導一些人又被別人領導,他們之間

的這種關係就是一種樹結構,圖1.1表示了emp表雇員間的這種樹結構。

在這個樹結構中,如果乙個節點有直接的下屬節點(如圖中的jones 有礙scott 和

ford),那麼稱該節點是下屬節點的父節點,下屬節點為該節點的子節點。通過雇員的

empno和mgr可以看出他們之間的父子節點關係,父節點的empno與子節點的mgr相同。在

樹結構中,有且僅有乙個節點無父節點,如圖中的king,該節點被稱為根節點。從圖上

的標記可以看出,只有king的mgr為空值。除根節點外,任何節點只有乙個父節點,有

乙個,多個或沒有子節點。

早掃瞄樹結構表時,需要依此訪問樹結構的每個節點,乙個節點只能訪問一次,其訪問

的步驟如下:

第一步:從根節點開始;

第二步:訪問該節點;

第三步:判斷該節點有無未被訪問的子節點,若有,則轉向它最左側的未被訪問的子

節,並執行第二步,否則執行第四步;

第四步:若該節點為根節點,則訪問完畢,否則執行第五步;

第五步:返回到該節點的父節點,並執行第三步驟。

總之:掃瞄整個樹結構的過程也即是中序遍歷樹的過程。

1. 樹結構的描述

樹結構的資料存放在表中,資料之間的層次關係即父子關係,通過表中的列與列間的關

系來描述,如emp表中的empno和mgr。empno表示該雇員的編號,mgr表示領導該雇員的

人的編號,即子節點的mgr值等於父節點的empno值。在表的每一行中都有乙個表示父節

點的mgr(除根節點外),通過每個節點的父節點,就可以確定整個樹結構。

在select命令中使用connect by 和藹start with 子句可以查詢表中的樹型結構關係。

其命令格式如下:

select 。。。

connect by

[start with];

其中:connect by子句說明每行資料將是按層次順序檢索,並規定將表中的資料連入樹

型結構的關係中。priory運算子必須放置在連線關係的兩列中某乙個的前面。對於節點

間的父子關係,prior運算子在一側表示父節點,在另一側表示子節點,從而確定查詢

樹結構是的順序是自頂向下還是自底向上。在連線關係中,除了可以使用列名外,還允

許使用列表示式。start with 子句為可選項,用來標識哪個節點作為查詢樹型結構的

根節點。若該子句被省略,則表示所有滿足查詢條件的行作為根節點。

例1 以樹結構方式顯示emp表的資料。

sql> select empno,ename,mgr

from emp

connect by prior empno=mgr

start with ename=』king』;

empno ename mgr

7839 king 

7566 jones 7839

7788 scott 7566

7876 adams 7788

7902 ford 7566

7369 smith 7902

7698 blake 7839

7499 allen 7698

7521 ward 7698

7654 martin 7698

7844 turner 7698

7900 james 7698

7782 clark 7839

7934 miller 7782

14 rows selected.

Oracle 樹結構查詢

同事寫的樹結構查詢,記錄一下 表結構很簡單 就兩列 rangid number rangname varchar2 主要根據rangid數值來表示層級關係 select t1.rangid,t1.rangname,decode select count from test t2 where t2.r...

Oracle查詢樹結構表

11月最後一天,趕緊寫多一篇湊夠四篇 對於樹狀結構的表,即有記錄父節點或子節點的表,如果不知道到底有多少層級,oracle有自帶的函式可以處理查詢 語法select a from b where c d start with id 1 connect by preid prior id prior代...

樹結構表查詢

我們經常會將乙個比較複雜的目錄樹儲存到乙個表中。或者將一些部門儲存到乙個表中,而這些部門互相有隸屬關係。這個時候你就會用到connect by prior start with。connect by 是結構化查詢中用到的,其基本語法是 select from tablename start with...