Oracle递归查询start with connect by prior
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle递归查询start with connect by prior相关的知识,希望对你有一定的参考价值。
参考技术A connect by递归查询基本语法是:start with:表示以什么为根节点,不加限制可以写1=1,要以id为123的节点为根节点,就写为start with id =123
connect by:connect by是必须的,start with有些情况是可以省略的,或者直接start with 1=1不加限制
prior:prior关键字可以放在等号的前面,也可以放在等号的后面,表示的意义是不一样的,比如 prior id = pid,就表示id就是这条记录的根节点了
举个例子,写条SQL:
t_user(用户表),t_unit_info(单位表),意思是以单位编码为"15803"的单位为根节点,查找出其单位及其子单位的用户信息
然后将prior换一下位置,发现只能查出单位编码为"15803"对应的单位,不能查子级单位
oracle 递归查询start with connect by prior的用法和知识不仅仅这些,本博客只是简单记录一下我所遇到的,网上发现一篇写的比较详细的博客,在Linux公社, https://www.linuxidc.com/Linux/2014-06/102687.htm ,
oracle方面的一些知识也可以参考我之前的一篇博客: https://blog.csdn.net/u014427391/article/details/82317376
Oracle 递归查询 (start with ...connect by ...prior)
1、connect by 是结构化查询中用到的,其基本语法是:
select … from tablename
start with 条件1
connect by 条件2
where 条件3;
例:
select * from table
start with org_id = ‘HBHqfWGWPy’
connect by prior org_id = parent_id;
connect by 条件2
where 条件3;
例:
select * from table
start with org_id = ‘HBHqfWGWPy’
connect by prior org_id = parent_id;
简单说来是将一个树状结构存储在一张表里,比如一个表中存在两个字段:
org_id,parent_id那么通过表示每一条记录的parent是谁,就可以形成一个树状结构。
org_id,parent_id那么通过表示每一条记录的parent是谁,就可以形成一个树状结构。
用上述语法的查询可以取得这棵树的所有记录。
其中:
条件1 是根结点的限定语句,当然可以放宽限定条件,以取得多个根结点,实际就是多棵树。
条件2 是连接条件,其中用PRIOR表示上一条记录,比如 CONNECT BY PRIOR org_id = parent_id;就是说上一条记录的org_id 是本条记录的parent_id,即本记录的父亲是上一条记录。例子中表示:从org_id的值为HBHqfWGWPy的这条记录开始查询,将该条记录的org_id 等于即将查询记录的 parent_id的所有记录查询出来,即查询org_id的值为HBHqfWGWPy这条记录的所有子节点。
条件3 是过滤条件,用于对返回的所有记录进行过滤。
其中:
条件1 是根结点的限定语句,当然可以放宽限定条件,以取得多个根结点,实际就是多棵树。
条件2 是连接条件,其中用PRIOR表示上一条记录,比如 CONNECT BY PRIOR org_id = parent_id;就是说上一条记录的org_id 是本条记录的parent_id,即本记录的父亲是上一条记录。例子中表示:从org_id的值为HBHqfWGWPy的这条记录开始查询,将该条记录的org_id 等于即将查询记录的 parent_id的所有记录查询出来,即查询org_id的值为HBHqfWGWPy这条记录的所有子节点。
条件3 是过滤条件,用于对返回的所有记录进行过滤。
2.关于PRIOR
运算符PRIOR被放置于等号前后的位置,决定着查询时的检索顺序。
PRIOR被置于CONNECT BY子句中等号的前面时,则强制从根节点到叶节点的顺序检索,即由父节点向子节点方向通过树结构,我们称之为自顶向下的方式。如:
CONNECT BY PRIOR EMPNO=MGR
PIROR运算符被置于CONNECT BY 子句中等号的后面时,则强制从叶节点到根节点的顺序检索,即由子节点向父节点方向通过树结构,我们称之为自底向上的方式。
运算符PRIOR被放置于等号前后的位置,决定着查询时的检索顺序。
PRIOR被置于CONNECT BY子句中等号的前面时,则强制从根节点到叶节点的顺序检索,即由父节点向子节点方向通过树结构,我们称之为自顶向下的方式。如:
CONNECT BY PRIOR EMPNO=MGR
PIROR运算符被置于CONNECT BY 子句中等号的后面时,则强制从叶节点到根节点的顺序检索,即由子节点向父节点方向通过树结构,我们称之为自底向上的方式。
例如:
CONNECT BY EMPNO=PRIOR MGR
在这种方式中也应指定一个开始的节点。
CONNECT BY EMPNO=PRIOR MGR
在这种方式中也应指定一个开始的节点。
以上是关于Oracle递归查询start with connect by prior的主要内容,如果未能解决你的问题,请参考以下文章
Oracle 递归查询 (start with ...connect by ...prior)
Oracle高级函数篇之递归查询start with connect by prior简单用法
Oracle递归查询start with connect by prior