11GR2遞迴With子查詢
11GR2增加了遞迴With子查詢
詳見 劍破冰山 429頁
樹形遍歷有了新方法.
原來使用sys_connect_by_path函式
遞迴With新寫法.
由兩個SQL union all而成.
上面的SQL是起始的條件.
下面的SQL是遞迴的條件.
搜尋子句
SEARCH
① { DEPTH FIRST BY c_alias [, c_alias]...
[ ASC | DESC ]
[ NULLS FIRST | NULLS LAST ]
② | BREADTH FIRST BY c_alias [, c_alias]...
[ ASC | DESC ]
[ NULLS FIRST | NULLS LAST ]
}
③ SET ordering_column
注:
①DEPTH FIRST表示按深度優先的順序來輸出。BY後面的列名及其升降序、空值放置順序指明瞭在深度優先的前提下,同一層次的資料的排序情況。
這和原來CONNECT BY查詢中的ORDER SIBLING BY子句是一樣的。
②BREADTH FIRST表示按廣度優先的順序來輸出。BY後面的列名及其升降序、空值放置順序指明瞭在廣度優先的前提下,同一層次的資料的排序情況。
③列名ordering_column用於存放排序後的序號,是一個從1開始的連續正整數。後續的查詢中可以利用這個列得知某行資料在整個結果集中的位置。
sys_connect_by_path結果:
深度優先遍歷
廣度優先遍歷
參考:
http://www.oracle.com/technetwork/cn/articles/hartley-recursive-086819-zhs.html
詳見 劍破冰山 429頁
樹形遍歷有了新方法.
原來使用sys_connect_by_path函式
- select
- employee_id,
- first_name,
- manager_id,
- level,
- sys_connect_by_path(employee_id,'\') as path,
- connect_by_root(first_name) as top_manager
- from employees
- start with manager_id is null
- connect by prior employee_id=manager_id;
遞迴With新寫法.
由兩個SQL union all而成.
上面的SQL是起始的條件.
下面的SQL是遞迴的條件.
- with t(employee_id,first_name,manager_id,the_level,path,top_manager) as
- (
- select
- employee_id,
- first_name,
- manager_id,
- 1 as the_level,
- '\'||employee_id as path,
- first_name as top_manager
- from employees
- where manager_id is null
- union all
- select
- e.employee_id,
- e.first_name,
- e.manager_id,
- 1+t.the_level as the_level,
- t.path||'\'||e.employee_id as path,
- t.top_manager
- from t,employees e
- where t.employee_id=e.manager_id
- )
- select * from t;
搜尋子句
SEARCH
① { DEPTH FIRST BY c_alias [, c_alias]...
[ ASC | DESC ]
[ NULLS FIRST | NULLS LAST ]
② | BREADTH FIRST BY c_alias [, c_alias]...
[ ASC | DESC ]
[ NULLS FIRST | NULLS LAST ]
}
③ SET ordering_column
注:
①DEPTH FIRST表示按深度優先的順序來輸出。BY後面的列名及其升降序、空值放置順序指明瞭在深度優先的前提下,同一層次的資料的排序情況。
這和原來CONNECT BY查詢中的ORDER SIBLING BY子句是一樣的。
②BREADTH FIRST表示按廣度優先的順序來輸出。BY後面的列名及其升降序、空值放置順序指明瞭在廣度優先的前提下,同一層次的資料的排序情況。
③列名ordering_column用於存放排序後的序號,是一個從1開始的連續正整數。後續的查詢中可以利用這個列得知某行資料在整個結果集中的位置。
sys_connect_by_path結果:
深度優先遍歷
- with t(employee_id,first_name,manager_id,the_level,path,top_manager) as
- (
- select
- employee_id,
- first_name,
- manager_id,
- 1 as the_level,
- '\'||employee_id as path,
- first_name as top_manager
- from employees
- where manager_id is null
- union all
- select
- e.employee_id,
- e.first_name,
- e.manager_id,
- 1+t.the_level as the_level,
- t.path||'\'||e.employee_id as path,
- t.top_manager
- from t,employees e
- where t.employee_id=e.manager_id
- )
- search depth first by manager_id set seq
- select * from t;
廣度優先遍歷
- with t(employee_id,first_name,manager_id,the_level,path,top_manager) as
- (
- select
- employee_id,
- first_name,
- manager_id,
- 1 as the_level,
- '\'||employee_id as path,
- first_name as top_manager
- from employees
- where manager_id is null
- union all
- select
- e.employee_id,
- e.first_name,
- e.manager_id,
- 1+t.the_level as the_level,
- t.path||'\'||e.employee_id as path,
- t.top_manager
- from t,employees e
- where t.employee_id=e.manager_id
- )
- search BREADTH first by manager_id set seq
- select * from t;
參考:
http://www.oracle.com/technetwork/cn/articles/hartley-recursive-086819-zhs.html
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29254281/viewspace-1965778/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- sql遞迴查詢子級SQL遞迴
- PostgreSQL 遞迴查詢SQL遞迴
- PostgreSQL=>遞迴查詢SQL遞迴
- SqlServer遞迴查詢SQLServer遞迴
- ORACLE 遞迴查詢Oracle遞迴
- SQL Server遞迴查詢SQLServer遞迴
- Oracle遞迴查詢sqlOracle遞迴SQL
- 一個遞迴查詢遞迴
- sql無限遞迴查詢SQL遞迴
- grep遞迴查詢子目錄遞迴
- Oracle SQL的遞迴查詢OracleSQL遞迴
- java-遞迴(檔案查詢)Java遞迴
- MS SQL Server的遞迴查詢SQLServer遞迴
- MySQL遞迴查詢樹狀表的子節點、父節點MySql遞迴
- 關於樹型結構資料遞迴查詢,轉非遞迴查詢的實現遞迴
- oracle中的遞迴sql查詢 connect by prior實現遞迴Oracle遞迴SQL
- 遞迴-M--二分查詢遞迴
- 遞迴樹形查詢所有分類遞迴
- 我對Postgresql遞迴查詢的理解SQL遞迴
- Mysql 實現樹狀遞迴查詢MySql遞迴
- MS SQL Server的遞迴查詢(2)SQLServer遞迴
- iOS 演算法之排序、查詢、遞迴iOS演算法排序遞迴
- 資料庫遞迴查詢:MySQL VS Sequelize資料庫遞迴MySql
- 透過遞迴查詢應用依賴遞迴
- Java實現遞迴查詢樹結構Java遞迴
- Sql Server 使用CTE實現遞迴查詢SQLServer遞迴
- SQL with as 的用法 以及遞迴函式的寫法 遞迴層次查詢SQL遞迴函式
- 【演算法拾遺】二分查詢遞迴非遞迴實現演算法遞迴
- 子查詢-表子查詢
- model 遞迴子級遞迴
- 第二章 :查詢與排序---------遞迴、查詢與排序補充排序遞迴
- Ztree + PHP 無限級節點遞迴查詢PHP遞迴
- oracle中connect by prior實現遞迴查詢Oracle遞迴
- 第二章 :查詢與排序-------二分查詢的遞迴解法排序遞迴
- 記錄一次遞迴查詢的運用遞迴
- 二分法查詢(遞迴實現)遞迴
- Linux 檔案、內容查詢(遞迴) ,grep ,findLinux遞迴
- 【聽海日誌】之ORACLE遞迴查詢學習Oracle遞迴