Oracle connect by 樹查詢之二

2022-06-01 01:51:08 字數 2098 閱讀 2321

先用scott使用者下的emp表做實驗.

emp表有個字段,乙個是empno(員工編號),另乙個是mgr(上級經理編號)

下面是表中所有資料

執行結果如下:

得到的結果是empno=7698的資料,以及會得到mgr=7698的資料。

它是向下遞迴的, 即我們從empno=7698開始遍歷,去找出mgr=7698的所有資料s(用s代表查出的所有資料.), 然後在從s中的empno的值去匹配查詢是否還有滿足,mgr in (s.empno)的資料。一直遍歷進去到沒有資料為止。 

下面的這個可以詳細的表述效果。12

--向下遞迴遍歷

select*fromempconnectbymgr=priorempno startwithempno=7839;

執行結果如下:

12--向上遞迴遍歷

select * from emp connect by prior mgr=empno start with empno=7844;

執行結果如下:

這樣直到沒有匹配的資料為止。

以上只是簡單的舉了個例子。

connect by是結構化查詢中用到的,其基本語法是:12

34select...fromtablename

startbycond1

connectbycond2

wherecond3

簡單說來是將乙個樹狀結構儲存在一張表裡,比如乙個表中存在兩個字段(如emp表中的empno和mgr欄位):empno, mgr那麼通過表示每一條記錄的mgr是誰,就可以形成乙個樹狀結構。

用上述語法的查詢可以取得這棵樹的所有記錄。

其中:cond1是根結點的限定語句,當然可以放寬限定條件,以取得多個根結點,實際就是多棵樹。

cond2是連線條件,其中用prior表示上一條記錄,比如connect by prior id=praentid就是說上一條記錄的id是本條記錄的praentid,即本記錄的父親是上一條記錄。

cond3是過濾條件,用於對返回的所有記錄進行過濾。

prior和start with關鍵字是可選項

prior運算子必須放置在連線關係的兩列中某乙個的前面。對於節點間的父子關係,prior運算子在一側表示父節點,在另一側表示子節點,從而確定查詢樹結構是的順序是自頂向下還是自底向上。在連線關係中,除了可以使用列名外,還允許使用列表示式。

start with子句為可選項,用來標識哪個節點作為查詢樹型結構的根節點。若該子句被省略,則表示所有滿足查詢條件的行作為根節點。

平衡查詢樹之2 3查詢樹

二叉查詢樹不能保證樹的平衡性,在最壞情況下,查詢插入操作需要線性時間。為了保證查詢樹的平衡性,有了2 3樹的概念。它是實現紅黑樹的基礎。2 3樹中有兩種結點 當插入結點時,通過一些基本操作,可以保證這棵樹是完美平衡的,因此查詢和插入的時間會是對數級的。插入過程有如下幾種可能性 區域性變換不會影響樹的...

平衡查詢樹之2 3樹

本文及後面文章介紹的平衡查詢樹的資料結構能夠保證在最差的情況下也能達到lgn的效率,要實現這一目標我們需要保證樹在插入完成之後始終保持平衡狀態,這就是平衡查詢樹 balanced search tree 在一棵具有n 個節點的樹中,我們希望該樹的高度能夠維持在lgn左右,這樣我們就能保證只需要lgn...

查詢系列之B 樹

一 b 樹的基本結構 定義的b 樹的儲存結構的節點的結構 typedef struct btnodebitreenode 二 b 樹的增刪改查 原始碼 b 樹 author 菜鳥 version 2014.7.9 include include include include define max ...