oracle 递归查询

country 表的数据是这样的,一看就明白的,pid 是父节点的id,现在想自连接查询。

从父节点向子节点方向得到树结构,

sql :

select * from country start with pid = 0 connect by prior id = pid;

查询结果为:


现在有个需求想从子节点向父节点方向得到树结构

于是需要改变sql :

select * from country start with pid = 12 connect by  id = prior pid;






总结一下:

此处摘自:http://hi.baidu.com/leslytt/item/d2a281bced80044a2bebe322


1) prior:被放置于等号前后的位置,决定着查询时的检索顺序。 
PRIOR被置于CONNECT BY子句中等号的前面时,则强制从根节点到叶节点的顺序检索,即由父节点向子节点方向通过树结构,我们称之为自顶向下的方式。例如: 
CONNECT BY PRIOR id = 父id
PIROR运算符被置于CONNECT BY 子句中等号的后面时,则强制从叶节点到根节点的顺序检索,即由子节点向父节点方向通过树结构,我们称之为自底向上的方式。例如: 
CONNECT BY id=PRIOR 父id


2) connect by:说明每行数据将是按层次顺序检索,并规定将表中的数据连入树型结构的关系中。PRIORY运算符必须放置在连接关系的两列中某一个的前面。对于节点间的父子关系,PRIOR运算符在一侧表示父节点,在另一侧表示子节点,从而确定查找树结构是的顺序是自顶向下还是自底向上。在连接关系中,除了可以使用列名外,还允许使用列表达式。START WITH 子句为可选项,用来标识哪个节点作为查找树型结构的根节点。若该子句被省略,则表示所有满足查询条件的行作为根节点。


3) start with:不但可以指定一个根节点,还可以指定多个根节点


表结构的定义:id(子) ,root_id(父)
prior id(子)  即一直检索子结点,就是自顶向下
prior root_id(父) 即一直检索父结点,就是自底向上




Oracle递归查询是一种询技术,用于询表中的层次结构数据,例如询某个节点的父节点或子节点。在Oracle中,可以使用start with connect by prior或with递归查询来实现递归查询。 使用start with connect by prior递归查询,可以询所有子节点、所有父节点、指定节点的根节点以及指定节点的递归路径。这种询方法通过在询条件中使用prior关键字来指定当前数据和下一条数据之间的关系。例如,使用START WITH子句指定起始节点,然后使用CONNECT BY子句指定节点之间的关系,可以实现向上或向下递归查询。 使用with递归查询,可以通过递归调用询多层结构的子节点或父节点。这种询方法使用WITH子句定义递归查询的初始条件和递归关系,并使用递归询来实现递归查询。 需要注意的是,递归查询可能会导致询时间特别长,特别是在数据量特别大的情况下。因此,在进行递归查询时,需要谨慎考虑询的效率和性能。 综上所述,Oracle提供了递归查询语句来实现对层次结构数据的询,包括start with connect by prior和with递归查询。这些询方法可以帮助我们方便地询父节点和子节点的关系。 #### 引用[.reference_title] - *1* [Oracle递归查询](https://blog.csdn.net/Michael_lcf/article/details/124433725)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Oracle递归查询树形数据](https://blog.csdn.net/weixin_40017062/article/details/127653569)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [ORACLE递归查询](https://blog.csdn.net/m0_46636892/article/details/122984132)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值