對於遞迴查詢語法的一些理解

2021-06-27 17:28:10 字數 1588 閱讀 6290

近期的面試過程中發現凡是提到oracle基本都會問乙個有關樹形結構資料查詢的問題。

後經朋友指點知道這種問題一般通過遞迴查詢來解決。

今天自己實踐了一下遞迴查詢的使用,經驗如下:

1)關鍵字為start with...connect by prior,可以沒有where關鍵字。

##start with 部分條件定義最根的節點,並且抽取結果只會是從最根節點延伸的的節點。(結果可能包括根節點)

比如,start with 建德市,那麼結果將只會是建德市和淳安鎮,start with 杭州市則上城下城建德淳安都將被列為抽取結果的物件。

##connect by prior定義了抽取時遞迴的鏈結規則。這裡需要注意遞迴只有到達前面start with定義的最根節點才會停止。

舉例來說,當我定義start with clm_value='杭州市' connect by prior clm_key=clm_subkey的話,淳安的遞迴結果將會是杭州,而非建德。

2)有乙個level的關鍵字很有用

假設查詢了杭州下屬的地區,但是只想要大區,不要鎮級(也就是不要淳安),那就可以在where條件中加上level=2。這裡杭州的level是1,上城下城建德的level是2,淳安是3。這個字段表示該條資料經過幾次遞迴才找到最根節點。

附:所用table以及資料

create table "tst_tb" 

( "clm_key" number(2,0),

"clm_subkey" number(2,0),

"clm_value" char(10 byte) default '' not null enable,

constraint "pk_tst_tb" primary key ("clm_key")

)

insert into tst_tb (clm_key,clm_subkey,clm_value) values (1,null,'杭州市 ');

insert into tst_tb (clm_key,clm_subkey,clm_value) values (2,1,'上城區 ');

insert into tst_tb (clm_key,clm_subkey,clm_value) values (3,1,'下城區 ');

insert into tst_tb (clm_key,clm_subkey,clm_value) values (4,1,'建德市 ');

insert into tst_tb (clm_key,clm_subkey,clm_value) values (5,4,'淳安鎮 ');

insert into tst_tb (clm_key,clm_subkey,clm_value) values (6,null,'上海市 ');

insert into tst_tb (clm_key,clm_subkey,clm_value) values (7,6,'嘉定區 ');

insert into tst_tb (clm_key,clm_subkey,clm_value) values (8,7,'江橋鎮 ');

ps這是初步實踐了一下,以後有深入研究了持續更新。

對於切片的一些理解

使用技巧 type struct 乙個切片是由資料指標加上長度和容量組成的,類似與c 中的vector。var a int 等價於nil b int 表示乙個空的切片,不等於nil c int len,cap都為3的切片 d c 2 cap為3,len為2。與c共享一片記憶體位址 e c 0 2 c...

對於java 集合的一些理解

list set繼承自collection儲存引用型別 且只能乙個乙個儲存 arraylist linkedlist vector 都是繼承自list arraylist linkedlist初始化為10 擴容後為1.5倍 vector 為2倍 arraylist 底層採用的資料結構為陣列儲存元素,...

對於多執行緒的一些理解

實現多執行緒的兩種方法 繼承thread類 實現runnable介面 jdk1.5之後提供了乙個心得callable介面 在啟動多執行緒的時候必須通過start 方法,而不能直接呼叫run 方法 原因 先來看下start 方法在thread類中的定義 public synchronized void...