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;    简单说来是将一个树状结构存储在一张表里,比如一个表中存在两个字段:

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 是过滤条件,用于对返回的所有记录进行过滤。 2.关于PRIOR

        运算符PRIOR被放置于等号前后的位置,决定着查询时的检索顺序。

        PRIOR被置于CONNECT BY子句中等号的前面时,则强制从根节点到叶节点的顺序检索,即由父节点向子节点方向通过树结构,我们称之为自顶向下的方式。如:

         CONNECT BY PRIOR EMPNO=MGR

         PIROR运算符被置于CONNECT BY 子句中等号的后面时,则强制从叶节点到根节点的顺序检索,即由子节点向父节点方向通过树结构,我们称之为自底向上的方式。 例如:

         CONNECT BY EMPNO=PRIOR MGR

         在这种方式中也应指定一个开始的节点。

相关文章