Oracle中Start With的用法
Oracle Start With 關鍵字
1.問題描述
在主銷售品目錄模塊查詢目錄節點下的銷售品用到此關鍵字。使用此關鍵字能夠解決層級結構的查詢問題。
2. 基本語法
SELECT ... FROM + 表名WHERE + 條件3 START WITH + 條件1 CONNECT BY PRIOR + 條件2描述:
條件1:
表示從哪個節點開始查找, 也就是通過條件1 查詢到的數據, 作為后續查詢的起始節點(參數).
當然可以放寬限定條件,如 ID in (‘00001’, ‘00011’)以取得多個根節點,也就是多棵樹;在連接關系中,除了可以使用列明外,還允許使用列表達式。
如果省略Start With:
就默認把所有滿足查詢條件的Tree整個表中的數據從頭到尾遍歷一次,每一個數據做一次根,然后遍歷樹中其他節點信息.
條件2:
是連接條件,其中用PRIOR表示上一條記錄,例如CONNECT BY PRIOR ID = PID,意思就是上一條記錄的ID是本條記錄的PID,即本記錄的父親是上一條記錄。CONNECT BY子句說明每行數據將是按照層次順序檢索,并規定將表中的數據連入樹形結構的關系中。
Prior 在父節點的一側表示, 自底向上查, 在 子節點的一側表示 自上向下查詢;
條件3:
不能用在 Connect By 后, 這里的條件判斷, 等價于 在最后查詢出結果列表之后, 再進行條件篩選; 并非 刪除掉 節點及子節點;
舉例:
ID, DSC, PID;三個字段, 分別表示 當前標識的 ID(主鍵), DSC 當前標識的描述, PID 其父級ID, 比較典型的例子 是 國家, 省, 市 這種層級結構;
省份歸屬于國家, 因此 PID 為 國家的 ID, 以此類推;
--自上向下Select * From DEMOStart With ID = '00001'--用 Start Wiht PID = '-1' 結果不變 Connect By Prior ID = PID--結果 ID DSC PID00001 中國 -1 00011 陜西 0000100111 西安 0001100112 咸陽 00011 00113 延安 00011 00012 貴州 00001 00013 河南 00001說明:
1.查出第一個條件為ID = '00001’的結果:00001 中國 -1
2.
所以結果為:00011 陜西 00001
3.循環1、2步直到查出所有
3.其他關鍵字
nocycle:消除數據本身不合理情況導致的循環。如:中國的ID與PID都為00001時將一直循環。
SIBLINGS: 關鍵字:它會保護層次,并且在每個等級中按expre排序。
例如:
Select ID, PID, DSC, connect_by_isleaf, LEVELFrom DEMOStart With ID = '00001' Connect By nocycle Prior ID = PIDORDER SIBLINGS By DSC相關介紹鏈接:
https://blog.csdn.net/weiwenhp/article/details/8218091
https://www.cnblogs.com/zyzdisciple/p/7873584.html
總結
以上是生活随笔為你收集整理的Oracle中Start With的用法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux防火墙firewalld安全设
- 下一篇: 决策树:ID3C4.5cart算法(从原