遞迴查詢方法

2021-08-30 23:26:03 字數 1769 閱讀 7594

sql server 2005開始支援遞迴查詢了。

之前我們在儲存乙個樹狀結構的時候,常常採用在**中增加乙個parentid這個字段儲存其對應上級,但是這樣的**設計,在查詢的時候,需要多次查詢才能查詢出所需要的結果,一般都需要程式來實現。

現在不用了,sql server 2005支援遞迴查詢了(oracle和db2早支援了)。

寫法如下:

假設表中的上下級關係採用的是id和parentid欄位來關聯。

with myt2 as(

select * from 表名 where 根節點查詢條件

union all

select 表名.* from myt2 inner join 表名 on myt2.id=表名.parentid)

select * from myt2

這樣就可以實現遞迴查詢了,查詢出來的結果就是從根節點一直到葉節點。

oracle遞迴查詢

關鍵字: oracle遞迴查詢

對於oracle進行簡單樹查詢(遞迴查詢)

deptid paredeptid name

number number char (40 byte)

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

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

sql**

select * from persons.dept start with deptid=76 connect by prior paredeptid=deptid

select * from persons.dept start with deptid=76 connect by prior paredeptid=deptid

通過根節點遍歷子節點.

sql**

select * from persons.dept start with paredeptid=0 connect by prior deptid=paredeptid

select * from persons.dept start with paredeptid=0 connect by prior deptid=paredeptid

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

sql**

select a.*,level from persons.dept a start with paredeptid=0 connect by prior deptid=paredeptid

select a.*,level from persons.dept a start with paredeptid=0 connect by prior deptid=paredeptid

再次複習一下:start with ...connect by 的用法, start with 後面所跟的就是就是遞迴的種子。

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

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

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

sql**

select first_value(deptid) over (order by level desc rows unbounded preceding) as firstdeptid from persons.dept start with deptid=76 connect by prior paredeptid=deptid

Java實現分叉查詢 遞迴方法

二分查詢又稱折半查詢,它是一種效率較高的查詢方法。二分查詢要求 1.必須採用順序儲存結構 2.必須按關鍵字大小有序排列 package 排序演算法 public class 快排 system.out.println binarysearch src,9,0,src.length 1 private...

19 查詢元素函式(遞迴方法)

題目 編寫乙個模板遞迴函式,確定元素 x 是否屬於陣列a 0 n 1 思路 題目中沒有說陣列有序,那麼預設為無序陣列,應該用線性查詢。同時是遞迴的,就應該從頭或尾乙個乙個比較,相等時返回找到,否則遞迴呼叫函式,傳入引數是陣列,並且元素個數少乙個。函式退出的條件有兩個 1.當由元素個數小於 0 時,說...

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