Oracle中start with...connect by prior子句用法.doc
select ... from tablename start with cond1
connect by cond2
where cond3;
簡單說來是將一個樹狀結構儲存在一張表裡,比如一個表中存在兩個欄位:
id,parentid那麼透過表示每一條記錄的parent是誰,就可以形成一個樹狀結構。
用上述語法的查詢可以取得這棵樹的所有記錄。
其中COND1是根結點的限定語句,當然可以放寬限定條件,以取得多個根結點,實際就是多棵樹。
COND2是連線條件,其中用PRIOR表示上一條記錄,比如 CONNECT BY PRIOR ID=PRAENTID就是說上一條記錄的ID是本條記錄的PRAENTID,即本記錄的父親是上一條記錄。
COND3是過濾條件,用於對返回的所有記錄進行過濾。
對於oracle進行簡單樹查詢(遞迴查詢)
DEPTID |
PAREDEPTID |
NAME |
NUMBER |
NUMBER |
CHAR (40 Byte) |
部門id |
父部門id(所屬部門id) |
部門名稱 |
透過子節點向根節點追朔.
Sql程式碼
select * from persons.dept start with deptid=76 connect by prior paredeptid=deptid
透過根節點遍歷子節點.
Sql程式碼
Select * from persons.dept start with deptid=0 connect by prior deptid=partdeptid
可透過level 關鍵字查詢所在層次.
Sql程式碼
- select a.*,level from persons.dept a start with paredeptid=0 connect by prior deptid=paredeptid
再次複習一下:start with ...connect by 的用法, start with 後面所跟的就是就是遞迴的種子。
遞迴的種子也就是遞迴開始的地方 connect by 後面的"prior" 如果預設:則只能查詢到符合條件的起始行,並不進行遞迴查詢;
connect by prior 後面所放的欄位是有關係的,它指明瞭查詢的方向。
練習: 透過子節點獲得頂節點
- select FIRST_VALUE(deptid) OVER (ORDER BY LEVEL DESC ROWS UNBOUNDED PRECEDING) AS firstdeptid from persons.dept start with deptid=76 connect by prior paredeptid=deptid
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25462274/viewspace-2122025/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- start with...connect by prior用法
- [轉載] Oracle:start with...connect by子句的用法Oracle
- START WITH...CONNECT BY PRIOR簡單使用
- oracle中start with connect by priorOracle
- 請教start with ......connect by prior .....用法
- oracle樹中prior的用法Oracle
- START WITH...CONNECT BY
- start with connect by prior
- Oracle 樹操作(select…start with…connect by…prior)Oracle
- connect by ...[prior]...start with 學習
- oracle 11g model子句的用法Oracle
- MySQL中BETWEEN子句的用法詳解MySql
- 詳解MySQL中WHERE子句的用法MySql
- Oracle行列轉換及pivot子句的用法Oracle
- 樹型結構start with..........connect by prior
- start with connect by 用法
- 【--SQL基礎-->層次化查詢(START BY ... CONNECT BY PRIOR)】SQL
- Oracle中 connect by prior 遞迴演算法Oracle遞迴演算法
- oracle SQL with 子句OracleSQL
- oracle中 connect by prior 遞迴演算法 (轉)Oracle遞迴演算法
- oracle中connect by prior實現遞迴查詢Oracle遞迴
- Oracle Connect By Prior 詳解Oracle
- 達夢資料庫DM8中WITH子句的簡單用法資料庫
- oracle中 Wait Events 和可能原因(oracle doc)OracleAI
- PHP的ob_start();用法PHP
- start with ... connect by用法簡介
- oracle中top用法Oracle
- Oracle中with的用法Oracle
- Oracle中group by用法Oracle
- SQLite中的WHERE子句SQLite
- SQLite中的FROM子句SQLite
- 【 Oracle中rownum的用法 】Oracle
- Oracle 中 case的用法Oracle
- ORACLE WITH CHECK OPTION子句詳解Oracle
- SQL中 where 子句和having子句中的區別SQL
- oracle中的遞迴sql查詢 connect by prior實現遞迴Oracle遞迴SQL
- Oracle中where子句中條件的物理執行順序Oracle
- 對Oracle資料庫中Stroage子句的一些理解Oracle資料庫