ORACLE进阶(十)start with connect by 实现递归查询_oracle start with connect by优化
在工作中,查看到类似于如下的SQL语句:orglev,orgcde,我们经常会将一个比较复杂的目录树存储到一个表中。或者将一些部门存储到一个表中,而这些部门互相有隶属关系。这个时候你就会用到。oracle 提供了语法结构可以实现递归查询。connect by是结构化查询中用到的,其基本语法是:select … from tablename start with 条件1 connect by pri
先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7
深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Web前端全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。





既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上前端开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
如果你需要这些资料,可以添加V获取:vip1024c (备注前端)
正文
一、前言
在工作中,查看到类似于如下的SQL语句:
select ibkcde,
orglev,
orgcde,
getparamOnelocale(cdeorg.orgname, cdeorg.ibkcde, ‘CDEORG’, ‘zh_CN’) orgname
from cdeorg
start with ibkcde = ‘51315’
connect by ibkcde = prior suporgno;
我们经常会将一个比较复杂的目录树存储到一个表中。或者将一些部门存储到一个表中,而这些部门互相有隶属关系。这个时候你就会用到connect by prior start with。oracle 提供了start with connect by 语法结构可以实现递归查询。
connect by 是结构化查询中用到的,其基本语法是:
select … from tablename start with 条件1 connect by prior 条件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,即本记录的父亲是上一条记录。- 条件3 是过滤条件,用于对返回的所有记录进行过滤。
例如:没有加start with ... connect by prior ...的查询结果:
select t.dim_id, t.pid, level from pmcode.pmcode_fj_tree_rl t where t.dim_id in (select b.dim_id from pmcode.PMCODE_KPI_DIM_OD b where b.kpi_id = ‘KC0011’)
结果:
DIM_ID PID LEVEL
1024 5003 0
1070 0 0
5003 1070 0
5006 0 0
增加start with ... connect by prior ...以后的结果:
select t.dim_id, t.pid, level from pmcode.pmcode_fj_tree_rl t where t.dim_id in (select b.dim_id
from pmcode.PMCODE_KPI_DIM_OD b where b.kpi_id = ‘KC0011’) start with t.dim_id = ‘1070’ ----表示从dim_id = '1070’开始(也就是说1070为根节点)
connect by prior t.dim_id = t.pid; ----表示上条记录的dim_id等于本条记录的pid
结果:
DIM_ID PID LEVEL
1070 0 1
5003 1070 2
1024 5003 3
在扫描树结构表时,需要依此访问树结构的每个节点,一个节点只能访问一次,其访问的步骤如下:
- 第一步:从根节点开始;
- 第二步:访问该节点;
- 第三步:判断该节点有无未被访问的子节点,若有,则转向它最左侧的未被访问的子节点,并执行第二步,否则执行第四步;
- 第四步:若该节点为根节点,则访问完毕,否则执行第五步;
- 第五步:返回到该节点的父节点,并执行第三步骤。
总之:扫描整个树结构的过程也即是中序遍历树的过程。
二、树结构的描述
树结构的数据存放在表中,数据之间的层次关系即父子关系,通过表中的列与列间的关系来描述,如 EMP 表中的 EMPNO 和 MGR 。 EMPNO 表示该雇员的编号, MGR 表示领导该雇员的人的编号,即子节点的 MGR 值等于父节点的 EMPNO 值。在表的每一行中都有一个表示父节点的 MGR (除根节点外),通过每个节点的父节点,就可以确定整个树结构。
在 SELECT 命令中使用 CONNECT BY 和 START WITH 子句可以查询表中的树型结构关系。其命令格式如下:
JavaScript
-
js的基本类型有哪些?引用类型有哪些?null和undefined的区别。
-
如何判断一个变量是Array类型?如何判断一个变量是Number类型?(都不止一种)
-
Object是引用类型嘛?引用类型和基本类型有什么区别?哪个是存在堆哪一个是存在栈上面的?
-
JS常见的dom操作api
-
解释一下事件冒泡和事件捕获
-
事件委托(手写例子),事件冒泡和捕获,如何阻止冒泡?如何组织默认事件?
-
对闭包的理解?什么时候构成闭包?闭包的实现方法?闭包的优缺点?
-
this有哪些使用场景?跟C,Java中的this有什么区别?如何改变this的值?
-
call,apply,bind
-
显示原型和隐式原型,手绘原型链,原型链是什么?为什么要有原型链
-
创建对象的多种方式
-
实现继承的多种方式和优缺点
-
new 一个对象具体做了什么
-
手写Ajax,XMLHttpRequest
-
变量提升
-
举例说明一个匿名函数的典型用例
-
指出JS的宿主对象和原生对象的区别,为什么扩展JS内置对象不是好的做法?有哪些内置对象和内置函数?
-
attribute和property的区别
-
document load和document DOMContentLoaded两个事件的区别
-
JS代码调试

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
需要这份系统化的资料的朋友,可以添加V获取:vip1024c (备注前端)
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
的技术提升。**
需要这份系统化的资料的朋友,可以添加V获取:vip1024c (备注前端)
[外链图片转存中…(img-wBzCAbyp-1713711531668)]
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐

所有评论(0)