oracle 递归查询,Oracle SQL递归查询教程
在oracle 中可以通过使用start with … connect by prior … 实现递归查询。如果你对递归查询很
模糊了话,或许下面的示例将会帮助你更好的理解oracle SQL 递归查询。
一、manually 方式实现的递归查询。
SQL> select employee_id,last_name,first_name,manager_id
2 from employees
3 where manager_id is null;
EMPLOYEE_ID LAST_NAME FIRST_NAME MANAGER_ID
———– ————– ————– ———-
100 King Steven
通过where 子句中的 manager_id is null 来确定一个递归查询的起点。
SQL> select employee_id,last_name,first_name,manager_id
2 from employees
3 where manager_id = 100;
EMPLOYEE_ID LAST_NAME FIRST_NAME MANAGER_ID
———– ————– ————– ———-
101 Kochhar Neena 100
102 De Haan Lex 100
114 Raphaely Den 100
120 Weiss Matthew 100
121 Fripp Adam 100
122 Kaufling Payam 100
123 Vollman Shanta 100
124 Mourgos Kevin 100
145 Russell John 100
146 Partners Karen 100
147 Errazuriz Alberto 100
EMPLOYEE_ID LAST_NAME FIRST_NAME MANAGER_ID
———– ————– ————– ———-
148 Cambrault Gerald 100
149 Zlotkey Eleni 100
201 Hartstein Michael 100
14 rows selected.
查询manager_id = 100 的雇员有那些,得到了一个结果集,oracle将会在这个结果集的基础上处理
这个结果集中的没一条记录,处理的方式和上面的方式是相同的,直到不能在进行递归下去了,处理
的流程将会返回到这个结果集中去取下一条记录要处理,如此反复直到把这个结果集中的每条记录都
处理完,最后返回给用户最终的结果集。
二、使用start with … connect by … 实现的递归查询。
SQL> ed
Wrote file afiedt.buf
1 select lpad(‘ ‘,level*2,’ ‘)||employee_id as emp_id,last_name,first_name,manager_id
2 from employees–level 指递归的深度。根节点为1,根据深度不断的自增1.这里用来控制缩进。
3 start with manager_id is null –指定递归查询中的根节点(开始节点)。
4 connect by prior employee_id = manager_id–prior 表示前面查询的结果集中的employee_id与当前查询中的manager_id 匹配。
5* order by emp_id desc
SQL> /
EMP_ID LAST_NAME FIRST_NAME MANAGER_ID
———————— ————– ————– ———-
100 King Steven
201 Hartstein Michael 100
149 Zlotkey Eleni 100
148 Cambrault Gerald 100
147 Errazuriz Alberto 100
146 Partners Karen 100
145 Russell John 100
124 Mourgos Kevin 100
123 Vollman Shanta 100
122 Kaufling Payam 100
121 Fripp Adam 100
EMP_ID LAST_NAME FIRST_NAME MANAGER_ID
———————— ————– ————– ———-
120 Weiss Matthew 100
114 Raphaely Den 100
102 De Haan Lex 100
101 Kochhar Neena 100
205 Higgins Shelley 101
204 Baer Hermann 101
203 Mavris Susan 101
202 Fay Pat 201
200 Whalen Jennifer 101
199 Grant Douglas 124
198 OConnell Donald 124
oracle 递归查询,Oracle SQL递归查询教程相关推荐
- oracle 递归查询,深入sql oracle递归查询
☆ 获取数据库所有表名,表的所有列名 select name from sysobjects where xtype='u' select name from syscolumns where i ...
- sql oracle 递归查询语句,oracle递归函数 oracle中SQL递归查询
关于oracle递归调用的自定义函数如何结束 比如存储过程a中有b,b中含a.用return结束判断,执行还是锁表,怎么解决 关于oracle递归调用的自定义函数如何结束 可以调用. C语言最基本的模 ...
- oracle sql循环判断语句怎么写,Oracle 非常详细的 PL/SQL入门教程,PL/SQL语法格式/循环语句/条件判断/异常处理...
PL/SQL入门教程目录 Oracle PL/SQL入门教程,PL/SQL语法格式/循环语句/条件判断/异常处理 一.PL/SQL简介 1.PL/SQL简介 1.PL/SQl是过程语言PL与结构化语言 ...
- oracle一条语句递归查询父子关系
1 建表: CREATE TABLE test_tree ( test_id INT NOT NULL, pid INT, test_val VARCHAR(10), PRIMARY KEY (te ...
- SQL 递归查询所有父子节点
原 SQL 递归查询所有父子节点 2016年05月16日 22:57:16 名贤集 阅读数 21628 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net ...
- SQL递归查询知多少
最近工作中遇到了一个问题,需要根据保存的流程数据,构建流程图.数据库中保存的流程数据是树形结构的,表结构及数据如下图: 仔细观察表结构,会发现其树形结构的特点: FFIRSTNODE:标记是否为根节点 ...
- SQL递归查询树型分类数据
目录 前言 1.准备分类数据 2.递归原理 3.实现 4.结合mybatis查询 总结 前言 相信大家在处理业务的时候经常会遇到分类数据,当面对这种情况时该如何处理呢?在这里我使用了两种方式解决:一种 ...
- mysql 在不同的数据库间查询语句_有关数据库SQL递归查询在不同数据库中的实现方法...
本文给大家介绍有关数据库SQL递归查询在不同数据库中的实现方法,具体内容请看下文. 比如表结构数据如下: Table:Tree ID Name ParentId 1 一级 0 2 二级 1 3 ...
- oracle 当前top sql,Oracle top 查询TOP SQL
有时Oracle数据库服务器,系统CPU爆高,通过Top命令可以查看到占用CPU最高的进程 我们需要记住前几个TOP的pid号,带入下面的SQL,到数据库中查询运行的进程.服务器.用户.SQL.等待等 ...
最新文章
- pip install mysql-connector 安装出错
- 快速掌握MATLAB应用,只要从这一步开始!
- PostgreSQL 给数据库添加用户
- Spring Boot @ SpringBootApplication,SpringApplication类
- OneNote 安装代码高亮插件 NoteHightlight的安装及使用基础教程
- 黑马程序员---初学java建议(亲身经历)
- 图片验证码识别 python_Python识别字符型图片验证码
- python 时间序列异常值_干货 :时间序列异常检测
- thinkpad l470 一种键盘错乱解决方法
- c++win32项目 如何显示后再删除一个绘图_iMATLAB 绘图扩展函数系列 | 让你绘图更自由(进阶专辑开篇)!...
- 猿创征文|我在人间编程那些年
- vue3中播放视频和m3u8后缀的视频解决办法
- 又到年中,固定资产管理该何去何从?
- 使用标准C++ 生成一个循环输出数字格式化前面补零的简单demo
- 实践指南-网页生成PDF
- 数据分析入门:初识数据埋点(一)
- 2.18 haas506 2.0开发教程 - 阿里云M2M设备间通信 - 规则引擎/Topic消息路由(仅支持2.2以上版本)
- 铁通宽带真差,千万不能用。
- [bzoj 1143--CTSC2008]祭祀
- 2018年深圳计算机一级报考,2018年深圳公务员考试报名入口(1.2-1.8)