Oracle數據庫遞歸查詢
瀏覽量: 次 發布日期:2023-10-15 20:13:19
Oracle數據庫遞歸查詢
上海數據恢復最近在做一個樹狀編碼管理系統,其中用到了oracle的樹狀遞歸查詢(關鍵字:SELECT ... WHERE... START WITH ... CONNECT BY PRIOR) 以后開發樹狀菜單、樹狀評論、樹狀文件結構,只要和樹扯得上關系的都可以應用,前提是你用的是oracle數據庫
以上數據PID為0的表示根節點,根節點可以有多個,根節點的PID最好不要用NULL,此時會引起全表掃描。 按照層級關系展示如下:
查詢ID為1的節點的兒子
常州數據恢復查詢ID為6的節點的所有親兄弟節點
從ID為1的節點開始,查詢所有屬于它的子節點,包括兒子,兒子的兒子,兒子的兒子的兒子,兒子的兒子的兒子....無限個兒子
當然,你也可以加WHERE條件,不要名稱中含有房東的兒子節點
甚至可以指定多個根節點
這個和上面查找某節點所有子節點(自頂向下的樹狀)的唯一區別就是PID和ID的位置交換了,上面能用的WHERE和IN這里也能用,不再贅述
不管節點是屬于哪個根節點的,只要在同一層級都可以查詢出來,和查詢某節點所有兄弟節點的不同之處在于,前者是查詢親兄弟,后者是所有兄弟,不管是親兄弟,堂兄弟,表兄弟 用臨時表保存層級信息(LEAF),然后從臨時表中查詢傳入ID的層級,最后查詢所有在同一層級的節點
可以看到,上面的所有節點都是2層級,本文最開始的層級關系展示圖可以用下面的SQL查詢出來,LPAD函數可適當調整
此查詢在對每個節點進行分類和其他表聯查的時候比較有用
自頂向下路徑查詢
自下向上路徑查詢 注意和自頂向下的在效率上的區別,引用別人的一句話
在這里我又不得不放個牢騷了。oracle只提供了一個sys_connect_by_path函數,卻忘了字符串的連接的順序。在上面的例子中,第一個sql是從根節點開始遍歷,而第二個sql是直接找到當前節點,從效率上來說已經是千差萬別,更關鍵的是第一個sql只能選擇一個節點,而第二個sql卻是遍歷出了一顆樹來。再次ps一下。https://www.cnblogs.com/linjiqin/p/3152674.html
查詢樹狀始終顯示根節點
動態查詢是否是葉子節點,是葉子節點表示該節點沒有兒子了,否則有兒子,ORACLE自帶的CONNECT_BY_ISLEAF能動態顯示是否葉子節點,1是0否
. oracle11g修復,Oracle 11g TNS-12545錯誤排查與修復指南
. 達夢數據庫comment報錯,達夢數據庫comment錯誤解析與應對策略
. 達夢數據庫啟動過程中會加載哪些文件,達夢數據庫啟動文件加載解析
. oracle數據庫數據恢復,Oracle數據庫數據恢復策略與實戰指南
. sqlserver誤刪數據庫怎么恢復,全面解析與實操步驟
. 達夢數據庫dca證書含金量,國產數據庫領域職業發展的敲門磚與能力認證
. 優化數據庫的八種方法,高效優化數據庫,輕松實現查詢加速與性能提升
. sql2012還原備份的數據庫,sql2012怎么還原數據庫
. oracle數據庫官網,深入探索Oracle數據庫官網——您的數據庫學習與資源寶庫