Oracle connect by start with clause
2014-01-09 17:03
302 查看
Article from:http://www.oradev.com/connect_by.jsp
How the start with CONNECT BY clause in Oracle works
This page explains the hierarchical query using the (start with) connect by clause in an Oracle SQL Query.If a table contains hierarchical data, then you can select rows in a hierarchical order using the hierarchical query clause (START WITH condition1) CONNECT BY condition2
The START WITH clause is optional and specifies the rows athat are the root(s) of the hierarchical query. If you omit this clause, then Oracle uses all rows in the table as root rows. The START WITH condition can contain a subquery, but it cannot contain a
scalar subquery expression.
The CONNECT BY clause specifies the relationship between parent rows and child rows of the hierarchy. The connect_by_condition can be any condition, however, it must use the PRIOR operator to refer to the parent row. Restriction on the CONNECT BY clause: The
connect_by_condition cannot contain a regular subquery or a scalar subquery expression.
The PRIOR operator to refer to the parent row can be used as following:
Sample query on the employees table:
SELECT employee_id, last_name, manager_id, LEVEL FROM employees CONNECT BY PRIOR employee_id = manager_id;
shows employee_id, last_name, manager_id and level in the tree for the employee hierarchy.
In Oracle 9i a new feature for hierarchical queries is added: sys_connect_by_path It returns the path of a column value from root to node, with column values separated by char for each row returned by CONNECT BY condition. Both column and char can be any of
the datatypes CHAR, VARCHAR2, NCHAR, or NVARCHAR2. The string returned is of VARCHAR2 datatype and is in the same character set as column.
Examples
The following example returns the path of employee names from employee Kochhar to all employees of Kochhar (and their employees):
SELECT LPAD(' ', 2*level-1)|| SYS_CONNECT_BY_PATH(last_name, '/') "Path" FROM employees CONNECT BY PRIOR employee_id = manager_id;
In Oracle 10 3 new features for hierarchical queries are added:
connect_by_root
CONNECT_BY_ROOT is a unary operator that is valid only in hierarchical queries. When you qualify a column with this operator, Oracle returns the column value using data from the root row. This operator extends the functionality of the CONNECT BY [PRIOR] conditionof hierarchical queries. Restriction on CONNECT_BY_ROOT: You cannot specify this operator in the START WITH condition or the CONNECT BY condition. Example query:
SELECT last_name "Employee", CONNECT_BY_ROOT last_name "Manager", LEVEL-1 "Pathlen", SYS_CONNECT_BY_PATH(last_name, '/') "Path" FROM employees WHERE LEVEL > 1 and department_id = 110 CONNECT BY PRIOR employee_id = manager_id;
connect_by_is_leaf
The CONNECT_BY_ISLEAF pseudocolumn returns 1 if the current row is a leaf of the tree defined by the CONNECT BY condition. Otherwise it returns 0. This information indicates whether a given row can be further expanded to show more of the hierarchy. ExampleSELECT employee_id, last_name, manager_id, connect_by_is_leaf "IsLeaf" FROM employees START WITH last_name = 'King' CONNECT BY PRIOR employee_id = manager_id;
connect_by_iscycle
The CONNECT_BY_ISCYCLE pseudocolumn returns 1 if the current row has a child which is also its ancestor. Otherwise it returns 0.You can specify CONNECT_BY_ISCYCLE only if you have specified the NOCYCLE parameter of the CONNECT BY clause. NOCYCLE enables Oracle to return the results of a query that would otherwise fail because of a CONNECT BY loop in the data.
相关文章推荐
- oracle 中 start with connect by 的用法
- oracle start with connect by prior 用法
- Oracle用Start with...Connect By子句递归盘问
- oracle函数dense_rank(),row_number(),connect_by_root(),start with connect by 用mysql如何实现
- Oracle 树操作(select…start with…connect by…prior)
- oracle 中的select ...connect by prior ...start with 及(+)的用法
- Oracle 树操作、递归查询(select…start with…connect by…prior)
- Oracle 的树形递归查询 Start With Connect BY
- oracle树形查询 start with connect by
- oracle start with connect by 用法
- oracle中的connect by prior ... start with 数据库的递归算法
- Oracle树结构查询 start with ... connect by用法简介
- Oracle 树操作(select…start with…connect by…prior)
- oracle connect by start with
- Oracle 树操作(select…start with…connect by…prior)
- oracle递归查询 start with connect by prior
- Oracle 树操作(select…start with…connect by…prior)
- Oracle connect by..start with/level
- ORACLE树查询,start with ... connect by prior ...
- 由Oracle的start with connect by prior展开的一些想法