oracle start with connect by 中prior的使用
2017-04-24 22:16
525 查看
Oracle 中使用connect by 来进行分层查询, 查询是可设置 起始行,即roots(start with clause), 若不设置,
所有行都将看做是root. 一个简单的例子如下:
SELECT employee_id, last_name, manager_id, LEVEL FROM employees CONNECT BY PRIOR employee_id = manager_id;
LEVEL 为伪列, 表示该行所处的层次, root为1.
其中较为难掌握的应该就是prior的使用了.
官方文档如下:
[start with condition1] connect by [nocycle] condition2
in a hierarchical query, one expression in condition must be qualified with the prior operator to refer
to the parent row.
也就是说, connect by 中prior 毗邻的column会作为父行的标志(父行通过start with 确定), 然后判断其他行的(等号对面的column)是否相等,如同相等, 作为它的子行, 同时level伪列+1, 递归进行搜索.
如下:
该SQL语句中, prior 在employee_id 附近, 因此 employee_id作为 父行的标志, 搜索其他行manager_id等于此行employee_id的行.
此外, 至Oracle 11g, Oracle提供了以下伪列和方法
connect_by_isleaf : 返回1若该行是叶节点, 表明该行不能继续扩展而得到更多的层级.
connect_by_root: 此为一元操作符, 后面跟根节点的一个列
connect_by_iscycle: 配合 nocycle使用, 返回1, 若此行开始了一个循环
sys_connect_by_path: 返回一个从根节点到该节点的字符串.
所有行都将看做是root. 一个简单的例子如下:
SELECT employee_id, last_name, manager_id, LEVEL FROM employees CONNECT BY PRIOR employee_id = manager_id;
LEVEL 为伪列, 表示该行所处的层次, root为1.
其中较为难掌握的应该就是prior的使用了.
官方文档如下:
[start with condition1] connect by [nocycle] condition2
in a hierarchical query, one expression in condition must be qualified with the prior operator to refer
to the parent row.
也就是说, connect by 中prior 毗邻的column会作为父行的标志(父行通过start with 确定), 然后判断其他行的(等号对面的column)是否相等,如同相等, 作为它的子行, 同时level伪列+1, 递归进行搜索.
如下:
SELECT employee_id, last_name, manager_id FROM employees CONNECT BY PRIOR employee_id = manager_id; EMPLOYEE_ID LAST_NAME MANAGER_ID ----------- ------------------------- ---------- 101 Kochhar 100 108 Greenberg 101 109 Faviet 108 110 Chen 108 111 Sciarra 108 112 Urman 108 113 Popp 108 200 Whalen 101 ...
该SQL语句中, prior 在employee_id 附近, 因此 employee_id作为 父行的标志, 搜索其他行manager_id等于此行employee_id的行.
此外, 至Oracle 11g, Oracle提供了以下伪列和方法
connect_by_isleaf : 返回1若该行是叶节点, 表明该行不能继续扩展而得到更多的层级.
connect_by_root: 此为一元操作符, 后面跟根节点的一个列
connect_by_iscycle: 配合 nocycle使用, 返回1, 若此行开始了一个循环
sys_connect_by_path: 返回一个从根节点到该节点的字符串.
相关文章推荐
- 在Oracle 中使用CONNECT BY PRIOR START WITH 语句详解
- Oracle中使用Start With connect by prior实现树功能
- oracle 使用 START WITH…CONNECT BY PRIOR 实现递归查询
- oracle的start with connect by prior如何使用
- 使用oracle的start with... connect by prior根据子节点,找到从子节点到根目录所有路径
- ORACLE查询树型关系(connect by prior start with)
- ORACLE查询树型关系(connect by prior start with)
- ORACLE start with… connect by prior 子句用法
- ORACLE查询树型关系(connect by prior start with)
- Oracle中start with...connect by prior
- oracle关键字 start with、、、 connect by prior 子句递归查询
- sqlserver实现oracle递归树函数样例(start with.....connect by prior)
- Oracle start with ... connect by prior 用法
- ORACLE start with… connect by prior 子句用法
- oracle中的connect by prior ... start with 数据库的递归算法
- ORACLE查询树型关系(connect by prior start with) .
- Oracle 树操作(select...start with... connect by ...prior )
- Oracle START WITH...CONNECT BY PRIOR的用法
- Oracle 迭代查询 CONNECT BY PRIOR ……START WITH ……
- oracle 递归查询 start with connect by prior