程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle數據庫基礎 >> Oracle結構化查詢中用到的基本語法

Oracle結構化查詢中用到的基本語法

編輯:Oracle數據庫基礎

如果你想了解connect by 是Oracle結構化查詢中用到的基本語法的話,你就可以點擊以下的文章對其在實際相關操作中的正確用法,有一個更加完善的認識,以下就是正文的詳細內容的介紹。

  1. select ... from tablename start by cond1  
  2. connect by cond2  
  3. where cond3;  

簡單說來是將一個樹狀結構存儲在一張表裡,比如一個表中存在兩個字段:id,parentid那麼通過表示每一條記錄的parent是誰,就可以形成一個樹狀結構。用上述語法的查詢可以取得這棵樹的所有記錄。

其中COND1是根結點的限定語句,當然可以放寬限定條件,以取得多個根結點,實際就是多棵樹。COND2是連接條件,其中用PRIOR表示上一條記錄,比如 CONNECT BY PRIOR ID=PRAENTID就是說上一條記錄的ID是本條記錄的PRAENTID,即本記錄的父親是上一條記錄。COND3是過濾條件,用於對返回的所有記錄進行過濾。

在connect by 是Oracle結構化查詢中用到的PRIOR和START WITH關鍵字是可選項PRIORY運算符必須放置在連接關系的兩列中某一個的前面。對於節點間的父子關系,PRIOR運算符在一側表示父節點,在另一側表示子節點,從而確定查找樹結構是的順序是自頂向下還是自底向上。

在連接關系中,除了可以使用列名外,還允許使用列表達式。START WITH 子句為可選項,用來標識哪個節點作為查找樹型結構的根節點。

若該子句被省略,則表示所有滿足查詢條件的行作為根節點。

完整的例子如

  1. SELECT PID,ID,NAME FROM T_WF_ENG_WFKIND START 
    WITH PID =0 CONNECT BY PRIOR ID = PID 

以上主要是針對上層對下層的順向遞歸查詢而使用start with ... connect by prior ...這種方式,但有時在需求需要的時候,可能會需要由下層向上層的逆向遞歸查詢,此是語句就有所變化:例如要實現

  1. select * from table where id in 
    ('0','01','0101','0203','0304') ; 

現在想把0304的上一級03給遞歸出來,0203的上一級02給遞歸出來,而01現在已經是存在的,最高層為0.而這張table不僅僅這些數據,但我現在只需要('0','01','0101','0203','0304','02','03')這些數據,此時語句可以這樣寫

  1. SELECT PID,ID,NAME FROM V_WF_WFKIND_TREE WHERE 
    ID IN (SELECT DISTINCT(ID) ID FROM V_WF_WFKIND_TREE 
    CONNECT BY PRIOR PID
     = ID START WITH ID IN 
    ('0','01','0101','0203','0304') ); 

其中START WITH ID IN裡面的值也可以替換SELECT 子查詢語句.注意由上層向下層遞歸與下層向上層遞歸的區別在於START WITH...CONNECT BY PRIOR...的先後順序以及 ID = PID 和 PID = ID 的微小變化!

以上的相關內容就是對connect by 是Oracle結構化查詢中用到基本語法的相關內容介紹,望你能有所收獲。 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved