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中start with...connect by prior子句用法.docOracle
- Oracle 樹操作(select…start with…connect by…prior)Oracle
- oracle中start with connect by priorOracle
- 樹狀sql中connect by裡prior的含義!SQL
- start with...connect by prior用法
- 請教start with ......connect by prior .....用法
- Oracle中with的用法Oracle
- Oracle中 connect by prior 遞迴演算法Oracle遞迴演算法
- 樹型結構start with..........connect by prior
- oracle中 connect by prior 遞迴演算法 (轉)Oracle遞迴演算法
- oracle中connect by prior實現遞迴查詢Oracle遞迴
- 【 Oracle中rownum的用法 】Oracle
- Oracle 中 case的用法Oracle
- Oracle Connect By Prior 詳解Oracle
- Oracle 樹形結構查詢的特殊用法Oracle
- Oracle中rowid的用法Oracle
- 【oracle中rowid的用法】Oracle
- oracle中copy from的用法Oracle
- oracle中的遞迴sql查詢 connect by prior實現遞迴Oracle遞迴SQL
- oracle中top用法Oracle
- Oracle中group by用法Oracle
- Oracle中的B樹索引Oracle索引
- Oracle中select ... for update的用法Oracle
- 案例:oracle中case when的用法Oracle
- Oracle中"cascade"的用法總結Oracle
- oracle中substr() instr() 用法Oracle
- oracle中merge into用法解析Oracle
- Oracle PL/SQL中EXCEPTION用法OracleSQLException
- ORACLE 中ROWNUM用法總結!Oracle
- ORACLE 中ROWNUM用法總結Oracle
- Oracle中顯示阻塞樹的SQLOracleSQL
- oracle集合型別的first、next、prior、last方法.TXTOracle型別AST
- oracle中的CURRVAL和NEXTVAL用法Oracle
- oracle中的exists 和not exists 用法詳解Oracle
- Oracle中的臨時表用法彙總Oracle
- ORACLE中ESCAPE關鍵字用法Oracle
- ORACLE 中ROWNUM用法總結! (轉)Oracle
- 非空校驗在oracle和mysql中的用法OracleMySql