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