数据库

位置:IT落伍者 >> 数据库 >> 浏览文章

ORACLE查询树型关系


发布日期:2023年03月24日
 
ORACLE查询树型关系

oracle中的select语句可以用START WITHCONNECT BY PRIOR子句实现递归查询connect by 是结构化查询中用到的其基本语法是

select * from tablename start with cond

connect by cond

where cond;

简单说来是将一个树状结构存储在一张表里比如一个表中存在两个字段:

idparentid那么通过表示每一条记录的parent是谁就可以形成一个树状结构

用上述语法的查询可以取得这棵树的所有记录

其中COND是根结点的限定语句当然可以放宽限定条件以取得多个根结点实际就是多棵树

COND是连接条件其中用PRIOR表示上一条记录比如 CONNECT BY PRIOR ID=PRAENTID就是说上一条记录的ID是本条记录的PRAENTID即本记录的父亲是上一条记录

COND是过滤条件用于对返回的所有记录进行过滤

对于oracle进行简单树查询(递归查询)

DEPTID NUMBER 部门id

PAREDEPTID NUMBER 父部门id(所属部门id)

NAME CHAR ( Byte) 部门名称

通过子节点向根节点追朔

select * from personsdept start with deptid= connect by prior paredeptid=deptid

通过根节点遍历子节点

select * from personsdept start with paredeptid= connect by prior deptid=paredeptid

可通过level 关键字查询所在层次

select a*level from personsdept a start with paredeptid= connect by prior deptid=paredeptid

PSstart with 后面所跟的就是就是递归的种子也就是递归开始的地方

connect by prior后面的字段顺序是有讲究的

若prior缺省则只能查询到符合条件的起始行并不进行递归查询

select * from table

start with org_id = HBHqfWGWPy

connect by prior org_id = parent_id;

简单说来是将一个树状结构存储在一张表里比如一个表中存在两个字段:

org_idparent_id那么通过表示每一条记录的parent是谁就可以形成一个树状结构

用上述语法的查询可以取得这棵树的所有记录

其中

条件 是根结点的限定语句当然可以放宽限定条件以取得多个根结点实际就是多棵树

条件 是连接条件其中用PRIOR表示上一条记录

比如 CONNECT BY PRIOR org_id = parent_id就是说上一条记录的org_id 是本条记录的parent_id即本记录的父亲是上一条记录

条件 是过滤条件用于对返回的所有记录进行过滤

简单介绍如下

在扫描树结构表时需要依此访问树结构的每个节点一个节点只能访问一次其访问的步骤如下

第一步从根节点开始

第二步访问该节点

第三步判断该节点有无未被访问的子节点若有则转向它最左侧的未被访问的子节点并执行第二步否则执行第四步

第四步若该节点为根节点则访问完毕否则执行第五步

第五步返回到该节点的父节点并执行第三步骤

总之扫描整个树结构的过程也即是中序遍历树的过程

上一篇:WIN2000下ORACLE计划任务自动备份方法

下一篇:Oracle中使用altertable来增加,删除,修改列的语法