浅谈Oracle树结构查询

浅谈Oracle树结构查询

简单说来是将一个树状结构存储在一张表里

oracle的start with connect by prior如何使用,其基本语法是:
select … from 表名
start with 条件
connect by prior

我们首先对于树结构的关键词有个概念上的认识和理解!

  prior:优先的

  start with:指定遍历的起点

start with语句来指定遍历的源头,即从哪里开始,start with可以省略,如果省略则表示所有满足查询条件的行作为根节点

connect by prior用来指定遍历的顺序,等号的两端连接的是父子关系,即是从老子开始找儿子,还是从儿子开始找老子…

prior被置于connect by prior子句中等号的前面时,则强制从根节点到叶节点的顺序检索,即老子找儿子,我们称之为自顶向下的方式。例:

select * from mdm_organization o start with o.org_code=‘10000008’ connect by prior o.org_code=o.org_parent_code
按照条件org_code=‘10000008’,对’10000008’(包括自己)及其子节点进行递归查询,这里先找org_code,再找上级是org_code的,这就是自顶向下。如下图所示:
浅谈Oracle树结构查询_第1张图片

prior运算符被置于connect by prior子句中等号的后面时,则强制从叶节点到根节点的顺序检索,即儿子找老子,我们称之为自底向上的方式。例:

select * from mdm_organization o start with o.org_code=‘10000008’ connect by o.org_code=prior o.org_parent_code
按照条件org_code=‘10000008’,对’10000008’(包括自己)及其父节点进行递归查询,这里先找org_parent_code,再找值与其对应的org_code,即子找父,这就是自底向上。如下图所示:
在这里插入图片描述

如果有where 条件,如下:

select * from mdm_organization o where 条件 start with
o.org_parent_code=‘10000008’ connect by o.org_code = prior
o.org_parent_code

执行顺序为先执行start with connect by prior,然后再按照where条件进行过滤。

你可能感兴趣的:(浅谈Oracle树结构查询)