oracle 遞迴查詢

來源:互聯網
上載者:User

標籤:blog   http   ar   io   os   sp   on   div   art   

--本文章可以直接粘貼到PLSQL運行,測試表就自己建立吧--測試名稱:測試oracle遞迴  --oracle版本:oracle8i--樣表:s_coalarea_test(地區表)--表結構:國家 level(等級) 1 level決定記錄在樹中的層次--     省份 level(等級) 2--     地區 level(等級) 3--     依次類推--備忘:這張地區表是一顆樹,遞迴查詢主要就是方便維護樹


--測試1:簡單遞迴 --需求:根據地區名稱查詢其所有的下級地區名稱 --備忘:aid是表主鍵,parentid是父節點主鍵,areaname地區名稱 --分析:遞迴查詢其實還是一個條件過濾 select s.areaname from  s_coalarea_test s  start with            --start with 是遞迴入口,也就是遞迴的起始位置 s.areaname =‘黑龍江‘       --指明允入準則  connect by prior         --prior 前序走訪 指明遍曆方向 入不寫 預設不遞迴查詢       s.aid=s.parentid         --級聯條件 也就是你的樹通過哪個欄位相連的 順序決定查詢結果 須注意 


--測試2:談遞迴入口 start with --需求:根據多個地區名查詢器所有下級地區 select s.areaname from  s_coalarea_test s  start with             s.areaname =‘黑龍江‘  --遞迴入口可以是多個值,其原理:先根據start with過濾記錄 or           --然後根據過濾後的記錄,依次遞迴遍曆結果 s.areaname=‘山西‘  connect by prior               s.aid=s.parentid  


--測試3:再談遞迴入口  --需求:根據多個地區名查詢器所有下級地區 --錯誤:測試結果讓人惱火,原來start with先於where執行,所以這個測試很失敗,大家要注意 select s.areaname from  s_coalarea_test s where s.areaname=‘黑龍江‘ or s.areaname = ‘山西‘  start with               s.areaname = s.areaname --既然start with只是過濾記錄,那麼當然我們也可以不在此處過濾,而直接用where過濾的結果了 connect by prior               s.aid=s.parentid  


--測試4:談級聯條件 --需求:根據地區名,查詢上級地區 select s.areaname from  s_coalarea_test s start with               s.areaname=‘大同‘ connect by prior               s.parentid=s.aid --注意,此時僅僅是級聯條件順序改變了          --總結:到底是查父節點還是子節點,有級聯順序決定          --規律:【本記錄欄位】=【串連欄位】          --如本執行個體:是通過本記錄的parentid匹配其他記錄的aid(主鍵)結果是查父節點          --      如順序顛倒,則是:有本記錄的aid(主鍵)匹配其他記錄的parentid,結果是查子節點            --測試5:遞迴關鍵字出現的位置 --需求:根據地區名稱尋找其所在省份
select s.areaname from  s_coalarea_test s where s.arealevel=1  --對遍曆結果進行過濾 start with       --start with 必須出現在where之後,但是可以是where and之間 入下例         s.areaname=‘大同‘ connect by prior               s.parentid=s.aid
--測試5:繼續談遞迴關鍵字出現的位置 --需求:根據地區名稱尋找其所在省份
select s.areaname from  s_coalarea_test s where s.arealevel=1  --對遍曆結果進行過濾 start with       --start with 之前不需要加and        s.areaname=‘大同‘ connect by prior               s.parentid=s.aid and s.arealevel=1 -  --where的過濾條件
group by s.areaname  --既然遞迴查詢也是過濾條件 當然可以跟group by
order by s.areaname  --既然遞迴查詢也是過濾條件 當然可以跟order by
--總結:start with ...connect by prior 遞迴查詢也是對結果過濾,類似where過濾,先於where過濾執行  http://my.oschina.net/lovedreamland/blog/90284

oracle 遞迴查詢

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.