oracle 遞迴查詢

2021-08-27 05:29:11 字數 1860 閱讀 1747

這個子句主要是用於b樹結構型別的資料遞迴查詢,給出b樹結構型別中的任意乙個結點,遍歷其最終父結點或者子結點。

先看原始資料:

對應b樹結構為:

接下來看乙個示例:

要求給出其中乙個結點值,求其最終父結點。以7為例,看一下**

start with 子句:遍歷起始條件,有個小技巧,如果要查父結點,這裡可以用子結點的列,反之亦然。

parentid、subid兩列誰放在「=」前都無所謂,關鍵是prior跟誰在一起。

order by 子句:排序,不用多說。

下面看看往葉子結點遍歷的例子:

這裡start with 子句用了parentid列,具體區別後面舉例說明。

connect by 子句中,prior跟subid在同一邊,就是往葉子結點方向遍歷去了。因為7有兩個子結點,所以第一級中有兩個結果(10和11),10有兩個子結點(12,13),11無,所以第二級也有兩個結果(12,13)。即12,13就是葉子結點。

下面看下start with子句中選擇不同的列的區別:

以查詢葉子結點(往下遍歷)為例

結果很明顯,原意是要以7為父結點,遍歷其子結點,左圖取的是父結點列的值,結果符合原意;右圖取的是子結點列的值,結果多餘的顯示了7 的父結點3.

關於where條件的語句,以後驗證後再記錄。先留個疑問

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

oracle 逆向遞迴查詢 oracle遞迴查詢

oracle的遞迴查詢 最近在看公司的oa系統,oa系統中基本都會有節點樹,其中對於樹上的資料展示,就是用了資料庫的遞迴查詢,在這裡總結下遞迴查詢。現在存在如下的一棵樹 不會畫樹,將就一下,該樹對應下面建立的表資料。建立如下表 create table dg id number not null,主...

oracle 逆向遞迴查詢 Oracle遞迴查詢

start with.connect by子句遞迴查詢一般用於乙個表維護樹形結構的應用。建立示例表 create table tbl test id number,name varchar2 100 byte pid number default 0 插入測試資料 insert into tbl t...