Oracle中connect by...start with...的使用
2014-05-08 13:55
302 查看
一、语法
大致写法:select * from some_table [where 条件1] connect by [条件2] start with [条件3];
其中 connect by 与 start with 语句摆放的先后顺序不影响查询的结果,[where 条件1]可以不需要。
[where 条件1]、[条件2]、[条件3]各自作用的范围都不相同:
[where 条件1]是在根据“connect by [条件2] start with [条件3]”选择出来的记录中进行过滤,是针对单条记录的过滤, 不会考虑树的结构;
[条件2]指定构造树的条件,以及对树分支的过滤条件,在这里执行的过滤会把符合条件的记录及其下的所有子节点都过滤掉;
[条件3]限定作为搜索起始点的条件,如果是自上而下的搜索则是限定作为根节点的条件,如果是自下而上的搜索则是限定作为叶子节点的条件;
示例:
假如有如下结构的表:sys_user(userid,username,leaderid),其中leaderid保存上级的id。
查找某员工的上级:
SELECT userid,username ,leaderid,LEVEL
FROM sys_user
CONNECT BY PRIOR leaderid = userid
START WITH userid='18007';
查询结果:
对prior的说明:
prior存在于[条件2]中,可以不要,不要的时候只能查找到符合“start with [条件3]”的记录,不会在寻找这些记录的子节点。要的时候有两种写法:connect by prior t.p_id=t.id 或 connect by t.p_id=prior t.id,前一种写法表示采用自上而下的搜索方式(先找父节点然后找子节点),后一种写法表示采用自下而上的搜索方式(先找叶子节点然后找父节点)。
大致写法:select * from some_table [where 条件1] connect by [条件2] start with [条件3];
其中 connect by 与 start with 语句摆放的先后顺序不影响查询的结果,[where 条件1]可以不需要。
[where 条件1]、[条件2]、[条件3]各自作用的范围都不相同:
[where 条件1]是在根据“connect by [条件2] start with [条件3]”选择出来的记录中进行过滤,是针对单条记录的过滤, 不会考虑树的结构;
[条件2]指定构造树的条件,以及对树分支的过滤条件,在这里执行的过滤会把符合条件的记录及其下的所有子节点都过滤掉;
[条件3]限定作为搜索起始点的条件,如果是自上而下的搜索则是限定作为根节点的条件,如果是自下而上的搜索则是限定作为叶子节点的条件;
示例:
假如有如下结构的表:sys_user(userid,username,leaderid),其中leaderid保存上级的id。
查找某员工的上级:
SELECT userid,username ,leaderid,LEVEL
FROM sys_user
CONNECT BY PRIOR leaderid = userid
START WITH userid='18007';
查询结果:
对prior的说明:
prior存在于[条件2]中,可以不要,不要的时候只能查找到符合“start with [条件3]”的记录,不会在寻找这些记录的子节点。要的时候有两种写法:connect by prior t.p_id=t.id 或 connect by t.p_id=prior t.id,前一种写法表示采用自上而下的搜索方式(先找父节点然后找子节点),后一种写法表示采用自下而上的搜索方式(先找叶子节点然后找父节点)。
相关文章推荐
- 在Oracle 中使用CONNECT BY PRIOR START WITH 语句详解
- Oracle中CONNECT BY...START WITH...的使用
- Oracle中connect by...start with...的使用
- Oracle中使用Start With connect by prior实现树功能
- Oracle中connect by...start with...的使用
- oracle格式化查询(start with ,connect by prior )使用情况
- Oracle中connect by...start with...的使用
- 使用MYSQL实现Oracle的Start with...Connect By递归树查询
- ORACLE中CONNECT BY...START WITH...的使用
- 使用oracle的start with... connect by prior根据子节点,找到从子节点到根目录所有路径
- oracle 使用 START WITH…CONNECT BY PRIOR 实现递归查询
- 使用MYSQL实现Oracle的Start with...Connect By递归树查询
- oracle 函数: start with ... connect by 使用方法
- connect by prior... start with的使用
- oracle start with connect by 中prior的使用
- oracle中connect by和start with的使用
- 使用 start with ...connect by ...合并一个列中的值
- ORACLE中CONNECT BY...START WITH...的使用
- 层次化查询 ,使用connect by 和start with 子句
- oracle中connect by...start with...的使用