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