(or)
START WITH [condition1] CONNECT BY [condition2]
SELECT * FROM PERSON p CONNECT BY p.name = PRIOR p.ID START WITH p.ID = 0
* CONNECT BY
- Specifies the relationship between parent rows and child rows of the hierarchy.
- 指定 Hierarchical Queries 中 parent rows and child rows 之間的關係,當前資料會與對應的 parent rows 做比較。
- One expression in condition must be qualified with the PRIOR operator to refer to the parent row
- condition 中必須有一個 PRIOR,且不能包含子查詢。
- CONNECT_BY_ISLEAF
* START WITH
- Specifies the root row(s) of the hierarchy.
- 指定 Hierarchical Queries 的 root (一筆或多筆),所有滿足 condition 的會被當作是 root rows。
- 可以省略,但若沒有指定給 root,則所有資料都會被當成 root,分別掃瞄。
- condition 可以是一個子查詢。
* PRIOR
- 指定 parent rows。
- Is most commonly used when comparing column values with the equality operator.
- ex: p.name = PRIOR p.ID,表示 id of prior row = name of current name。
- prior 放在子節點端,表示是以 START WITH 指定的節點做為跟節點,由上往下掃瞄,可能對一個或多個分支。
- prior 放在父節點端,表示是以 START WITH 指定的節點做為最低層子節點,從下往上掃瞄,直到根節點為只,這種情況只能得到一個分支。
* LEVEL
- Level of root row is 1,所以其 child rows 的 LEVEL = 2。
* SQL 執行順序
- JOIN,無論是 JOIN ON 還是在 WHERE 中做的關連
- CONNECT BY
- 其它的WHERE條件
* Reference
- Oracle Connect By
- The Oracle PL/SQL PRIOR Operator
- Hierarchical Queries
- 【原】Oracle开发专题之:级联查询(Hierarchical Queries) - pengpenglin - BlogJava
- Oracle Handbook系列之一:结构化查询(Hierarchical Queries) - SnowToday - 博客园
- oracle树中prior的用法 - space6212的个人空间 - ITPUB个人空间 - powered by X-Space
沒有留言:
張貼留言