Oracle数据库递归查询
浏览量: 次 发布日期:2023-10-15 20:13:19
Oracle数据库递归查询
上海数据恢复最近在做一个树状编码管理系统,其中用到了oracle的树状递归查询(关键字:SELECT ... WHERE... START WITH ... CONNECT BY PRIOR) 以后开发树状菜单、树状评论、树状文件结构,只要和树扯得上关系的都可以应用,前提是你用的是oracle数据库
以上数据PID为0的表示根节点,根节点可以有多个,根节点的PID最好不要用NULL,此时会引起全表扫描。 按照层级关系展示如下:
查询ID为1的节点的儿子
常州数据恢复查询ID为6的节点的所有亲兄弟节点
从ID为1的节点开始,查询所有属于它的子节点,包括儿子,儿子的儿子,儿子的儿子的儿子,儿子的儿子的儿子....无限个儿子
当然,你也可以加WHERE条件,不要名称中含有房东的儿子节点
甚至可以指定多个根节点
这个和上面查找某节点所有子节点(自顶向下的树状)的唯一区别就是PID和ID的位置交换了,上面能用的WHERE和IN这里也能用,不再赘述
不管节点是属于哪个根节点的,只要在同一层级都可以查询出来,和查询某节点所有兄弟节点的不同之处在于,前者是查询亲兄弟,后者是所有兄弟,不管是亲兄弟,堂兄弟,表兄弟 用临时表保存层级信息(LEAF),然后从临时表中查询传入ID的层级,最后查询所有在同一层级的节点
可以看到,上面的所有节点都是2层级,本文最开始的层级关系展示图可以用下面的SQL查询出来,LPAD函数可适当调整
此查询在对每个节点进行分类和其他表联查的时候比较有用
自顶向下路径查询
自下向上路径查询 注意和自顶向下的在效率上的区别,引用别人的一句话
在这里我又不得不放个牢骚了。oracle只提供了一个sys_connect_by_path函数,却忘了字符串的连接的顺序。在上面的例子中,第一个sql是从根节点开始遍历,而第二个sql是直接找到当前节点,从效率上来说已经是千差万别,更关键的是第一个sql只能选择一个节点,而第二个sql却是遍历出了一颗树来。再次ps一下。https://www.cnblogs.com/linjiqin/p/3152674.html
查询树状始终显示根节点
动态查询是否是叶子节点,是叶子节点表示该节点没有儿子了,否则有儿子,ORACLE自带的CONNECT_BY_ISLEAF能动态显示是否叶子节点,1是0否
. oracle11g修复,Oracle 11g TNS-12545错误排查与修复指南
. 达梦数据库comment报错,达梦数据库comment错误解析与应对策略
. 达梦数据库启动过程中会加载哪些文件,达梦数据库启动文件加载解析
. oracle数据库数据恢复,Oracle数据库数据恢复策略与实战指南
. sqlserver误删数据库怎么恢复,全面解析与实操步骤
. 达梦数据库dca证书含金量,国产数据库领域职业发展的敲门砖与能力认证
. 优化数据库的八种方法,高效优化数据库,轻松实现查询加速与性能提升
. sql2012还原备份的数据库,sql2012怎么还原数据库
. oracle数据库官网,深入探索Oracle数据库官网——您的数据库学习与资源宝库