Oracle函数sys_connect_by_path 详解

语法:
Oracle函数:sys_connect_by_path 主要用于树查询(层次查询) 以及 多列转行。其语法一般为:
       select ... sys_connect_by_path(column_name,‘connect_symbol‘)  from table 
       start with ... connect by ... prior
理解:
对于数据库来说,根节点并不一定是在数据库中设计的顶级节点,而是start with开始的地方。sys_connect_by_path函数就是从start with开始的地方开始遍历,并记下其遍历到的节点,start with开始的地方被视为根节点,将遍历到的路径根据函数中的分隔符,组成一个新的字符串。sys_connect_by_path函数用connect by来寻找下一条记录,直到迭代找不到相应记录为止。概念与递归类似,connect by指定递归(连接)条件,如果条件不满足则递归结束。

1. 查找一个员工的所有下属员工。

start with ename=‘King‘ connect by  prior empno=  mgr; 
我是这样理解的:首先数据库中的字段:empno--empname--mgr;这里从‘King‘开始,把‘King‘的编号做为管理编号,然后在‘King‘编号为管理员的员工就是他的下属(循环方式)。

2. 查找一个员工的所有上司经理。

start with ename=‘King‘ connect by  prior mgr= empno;
我是这样理解的:首先数据库中的字段:empno--empname--mgr;这里从‘King‘开始,把‘King‘的编号做为员工编号,然后在‘King‘编号的gmr就是他的上司(迭代方式)。

下面是实验:

--CREAT TABLE emp
create table emp ( empno varchar2(5), ename varchar2(8), mgr varchar2(8));
--INSERT DATA
insert into emp (EMPNO, ENAME, MGR)
values (‘1‘, ‘jim‘, ‘7‘);

insert into emp (EMPNO, ENAME, MGR)
values (‘2‘, ‘tom‘, ‘7‘);

insert into emp (EMPNO, ENAME, MGR)
values (‘3‘, ‘tim‘, ‘7‘);

insert into emp (EMPNO, ENAME, MGR)
values (‘4‘, ‘lily‘, ‘7‘);

insert into emp (EMPNO, ENAME, MGR)
values (‘5‘, ‘mary‘, ‘7‘);

insert into emp (EMPNO, ENAME, MGR)
values (‘6‘, ‘tid‘, ‘7‘);

insert into emp (EMPNO, ENAME, MGR)
values (‘7‘, ‘King‘, ‘10‘);

insert into emp (EMPNO, ENAME, MGR)
values (‘8‘, ‘kenvin‘, ‘10‘);

insert into emp (EMPNO, ENAME, MGR)
values (‘9‘, ‘shema‘, ‘8‘);

insert into emp (EMPNO, ENAME, MGR)
values (‘10‘, ‘john‘, ‘0‘);

insert into emp (EMPNO, ENAME, MGR)
values (‘0‘, ‘root‘, ‘‘);

SELECT * FROM emp;

select sys_connect_by_path(ename,‘>‘) tree from emp start with ename=‘King‘ connect by prior empno = mgr;

select sys_connect_by_path(ename,‘/‘) tree from emp start with ename=‘King‘ connect by prior empno = mgr; --可以理解为查询king的员工 ‘>’与‘/’只是一个输出格式

select sys_connect_by_path(ename,‘/‘) tree from emp start with ename=‘King‘ connect by empno= prior mgr; --可以理解为查询king的领导 效果与connect by prior mgr= empno相同

select sys_connect_by_path(ename,‘/‘) tree,level from emp start with ename=‘King‘ connect by prior mgr= empno;--可以理解为查询king的领导

总结(自己理解):connect by prior column1 = column2 或者 connect by  column2 = prior column1 写法都可以,

主要看prior写在谁的前面,prior写在谁的前面谁就作为父级值(参照值),也就是说[connect by prior column1 = column2]的意思就是是 按start with 条件查询出的记录行,以column1为参考值,查询column2为column1值的记录。

转自:https://www.cnblogs.com/shulmblogs/archive/2011/09/29/2195236.html

时间: 2024-10-17 05:17:11

Oracle函数sys_connect_by_path 详解的相关文章

oracle trim函数用法详解

在oracle数据库中,trim一般都是用在删除字符串两边的空格.实际上,trim也可以用来删除字符串两边的指定字符.并且trim指定删除的字符串只能是单个字符Oracle TRIM函数是很常见的函数,下面对Oracle TRIM函数的语法作了详尽的阐述说明,希望可以让您对Oracle TRIM函数有更深的认识. 如果提到Oracle TRIM函数,最简单的功能就是使用它来去除字符串的行首和行尾的空格,这个功能也是大家使用频率最高的一种.然而Oracle TRIM函数其实是具有删除“任意指定”字

Oracle 11g数据库详解(2015-1-18更新)

Oracle 11g数据库详解 整理者:高压锅 QQ:280604597 Email:[email protected] 大家有什么不明白的地方,或者想要详细了解的地方可以联系我,我会认真回复的 1   简介 数据库操作主要有以下几步: 1.  启动.停止数据库 2.  连接.断开数据库 3.  创建.修改.删除数据库用户 4.  表空间 5.  新建.修改.删除表 6.  查询.插入.修改.删除表数据 7.  新建.修改.删除视图 8.  新建.修改.删除存储过程 9.  新建.修改.删除触发

Oracle 11g数据库详解(2015-02-28更新)

Oracle 11g数据库详解 整理者:高压锅 QQ:280604597 Email:[email protected] 大家有什么不明白的地方,或者想要详细了解的地方可以联系我,我会认真回复的 1   简介 数据库操作主要有以下几步: 1.  启动.停止数据库 2.  连接.断开数据库 3.  创建.修改.删除数据库用户 4.  表空间 5.  新建.修改.删除表 6.  查询.插入.修改.删除表数据 7.  新建.修改.删除视图 8.  新建.修改.删除存储过程 9.  新建.修改.删除触发

Oracle数据库备份详解

Oracle数据库备份详解 Oracle官方提供多种备份方式,日常使用最多的有exp/imp常规方式,及数据泵expdp/impdp方式:下面对这两种方式进行详解. 常规方式 exp/imp imp/exp是Oracle导入导出命令,可以用作数据的迁移,expdp/imdp也是Oracle数据导入导出的命令,效率比imp/exp效率要高,这个后面再讨论 一  EXP导出命令 exp 是数据的导出命令,可以用于表,用户,整个数据库,exp -help查看帮助 Export: Release 11.

PE文件结构与函数导出表——详解与实例

PE文件结构与函数导出表--详解与实例 随着windows系统从Xp升级到Win7.Win8, 从32位升级到64位,PE文件结构在整体未变的情况下发生了一些小的变动,一方面是推荐的程序装载地址未采用,另一方面,导出函数序号不再是简单的升序,而是一定程度上的进行了乱序.本文首先对PE文件结构进行了详尽的解说,接着介绍了如何得出函数导出表,整个过程采用SysWoW64目录下的wininet.dll实例进行说明.在介绍过程中,明确指出了Win7.Win8等新系统相对Xp带来的区别. 文章链接:htt

Oracle cursor_sharing 参数 详解

一. 官网的说明 http://download.oracle.com/docs/cd/E11882_01/server.112/e17110/initparams042.htm#REFRN10025 1.1 CURSOR_SHARING Property Description Parameter type String Syntax CURSOR_SHARING = { SIMILAR | EXACT | FORCE } Default value EXACT Modifiable ALTE

Python学习入门教程,字符串函数扩充详解

因有用户反映,在基础文章对字符串函数的讲解太过少,故写一篇文章详细讲解一下常用字符串函数.本文章是对:程序员带你十天快速入门Python,玩转电脑软件开发(三)中字符串函数的详解与扩充. 如果您想学习并参与本教程的完善与写作.请在下方讨论区,回复相关问题.一起完善本文章教程的书写. Python字符串常用函数. 声明字符串变量: str = ‘关注做全栈攻城狮,写代码也要读书,爱全栈,更爱生活.’ 下面所有字符串函数函数,是对变量str进行操作: 求字符串长度: 函数使用: 运行结果: 值得注意

自写函数VB6 STUFF函数 和 VB.net 2010 STUFF函数 详解

'*************************************************************************'**模 块 名:自写函数VB6 STUFF函数 和 VB.net 2010 STUFF函数 详解'**说    明:蓝凤凰设计商城 浴火凤凰-郭卫 | 蓝凤凰-魔灵 | 郭卫-icecept'**创 建 人:浴火凤凰-郭卫'**日    期:2015年10月10日  23:13:55'**修 改 人:浴火凤凰-郭卫'**日    期:'**描   

ORACLE用户PROFILE详解

ORACLE用户PROFILE详解   一.官网说明 Oraclerecommends that you use the Database Resource Manager rather than the SQLstatement to establish resource limits. The Database Resource Manager offers amore flexible means of managing and tracking resource use. Purpose