oracle樹中prior的用法
在oracle生成樹時,prior起了至關重要的作用,它決定了書的遍歷方向。下面用例子分別闡述之:
1、prior放在子節點方向
scott@ORA9I> l
1 SELECT substr(sys_connect_by_path(ENAME,'->'),3) EMPLOYEE
2 FROM EMP
3 CONNECT BY PRIOR EMPNO=MGR
4* START WITH ENAME='JONES'
scott@ORA9I> /
EMPLOYEE
------------------------------------------------------------
JONES
JONES->SCOTT
JONES->SCOTT->ADAMS
JONES->FORD
JONES->FORD->SMITH
--從上面可以看出,如果prior放在子節點方向,則oracle會根據start with指定的節點作為根節點,從上往下遍歷基於指定節點的所有分支。它可能會對應多個分支。
--如果不指定start with,則oracle會把所有的節點都當成根節點分別往下遍歷。
--用以下方法檢視以JONES為根節點的所有完整的分支
scott@ORA9I> l
1 SELECT substr(sys_connect_by_path(ENAME,'->'),3) EMPLOYEE
2 FROM EMP
3 WHERE EMPNO NOT IN (SELECT MGR FROM EMP WHERE MGR IS NOT NULL)
4 CONNECT BY PRIOR EMPNO=MGR
5* START WITH ENAME='JONES'
scott@ORA9I> /
EMPLOYEE
------------------------------------------------------------
JONES->SCOTT->ADAMS
JONES->FORD->SMITH
2、prior放在父節點方向
scott@ORA9I> l
1 SELECT substr(sys_connect_by_path(ENAME,'->'),3) EMPLOYEE
2 FROM EMP
3 CONNECT BY PRIOR MGR=EMPNO
4* START WITH ENAME='JONES'
scott@ORA9I> /
EMPLOYEE
------------------------------------------------------------
JONES
JONES->KING
--從以上結果可以看出,當prior放在父節點端時,oracle會根據start with執行的節點作為子節點,從下往上找其對應的父節點,然後再根據找到的父節點找父節點的父節點,依此類推,直到找到根節點為止。
--我們也不難知道,這種情況下只可能有一個分支。
--用以下方法檢視以JONES為最低層子節點的完整的分支
scott@ORA9I> l
1 SELECT substr(sys_connect_by_path(ENAME,'->'),3) EMPLOYEE
2 FROM EMP
3 WHERE MGR IS NULL
4 CONNECT BY PRIOR MGR=EMPNO
5* START WITH ENAME='JONES'
scott@ORA9I> /
EMPLOYEE
------------------------------------------------------------
JONES->KING
總結:
1)prior放在子節點端,則表示掃描樹是以start with指定的節點作為根節點從上往下掃描。可能對應一個或多個分支。
start with可以省略,如果省略,表示對所有節點都當成根節點分別進行遍歷
2)prior放在父節點端,則表示掃描樹是以start with指定的節點作為最低層子節點,從下往上掃描。順序是子節點往父節點掃描,直到根節點為止,這種情況只能得到一個分支。
start with可以省略,如果省略,表示對所有節點都當成最低層子節點分別往根節點方向遍歷
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/231499/viewspace-63790/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- oracle中的CURRVAL和NEXTVAL用法Oracle
- Oracle中的B樹索引Oracle索引
- oracle中substr() instr() 用法Oracle
- oracle comment on的用法Oracle
- 非空校驗在oracle和mysql中的用法OracleMySql
- oracle樹的裁剪Oracle
- ORACLE SEQUENCE用法Oracle
- 【Oracle的NVL函式用法】Oracle函式
- Oracle中Nextval用法SEQUENCE與SYS_GUID()OracleGUI
- oracle中listagg()和wmsys.wm_concat()基本用法Oracle
- 【TUNE_ORACLE】Oracle Hint之概念與用法Oracle
- 淺析REGEXP_SUBSTR,PRIOR,CONNECT BY
- Oracle行列轉換及pivot子句的用法Oracle
- [轉載] Oracle:start with...connect by子句的用法Oracle
- Oracle臨時表的用法總結FLOracle
- vxe-table 樹形表格的用法詳解
- js中的this用法JS
- oracle樹形查詢Oracle
- 影像分割 | Context Prior CPNet | CVPR2020Context
- MYSQL中replace into的用法MySql
- MySQL中limit的用法MySqlMIT
- js中的||與&&用法JS
- iOS 中 cell的用法iOS
- Java中DecimalFormat的用法JavaDecimalORM
- python中return的用法Python
- golang中channel的用法Golang
- python中的eval用法Python
- DataTable中的select()用法
- Python中if的基本用法Python
- Java中super的用法Java
- mySQL中replace的用法MySql
- SQL中Merge的用法SQL
- Oracle如何建立B樹索引Oracle索引
- Oracle批量插入資料insert all into用法Oracle
- 【SQL】Oracle查詢轉換之 OR用法SQLOracle
- C++中const的用法C++
- Python中return self的用法Python
- JAVA中String format的用法JavaORM