oracle查询mgr,Oracle学习:结构化查询实例演示与解析

【IT168技术】一、准备测试数据

建立一张简单的职工表 t_hierarchical:

|-Emp 职工编号|-Mgr 职工的直接上司(Mgr本身也是职工)|-Emp_name 职工姓名

插入一些测试数据,除了大老板AA,其它的职工都各有自己的Manager。

selectemp, mgr, emp_namefromt_hierarchical t;

1AA21BB32CC43DD52EE63FF

二、CONNECT BY

selectemp, mgr,LEVELfromt_hierarchical t

CONNECTBYPRIOR emp=mgrorderbyemp;

11212211321323322434431432433523522521632633634631

解释一下,CONNECT BY用于指定 父-子 记录的关系(PRIOR我们在下例中解释,更直观一些)。举emp 2为例,他隶属于emp 1,如果我们以emp 1为根节点,显然LEVEL=2;以emp 2自身为根节点,则LEVEL=1,这就是为什么上述查询结果中出现共色标识部分那两行记录,其它的类推。

三、START WITH

selectemp, mgr,LEVELfromt_hierarchical t

STARTWITHemp=1CONNECTBYPRIOR emp=mgr;

11212323434634523

通常我们需要更直观、更具有实用性的结果,这需要用到结构化查询中的START WITH子句,用于指定根节点:

这里我们指定了根节点是emp 1,这样的结果直观了许多,例如,以emp 1为根节点,那么emp 3位于第三级(emp 1—emp 2—emp 3),这里补充一下 PRIOR 关键字的说明,个人观点:“PRIOR emp=mgr”表示前一条记录的emp编号 = 当前记录的mgr编号,从查询结果中可以看出这一点。同时,从查询结果中还能发现明显的 递归 痕迹,参见不同颜色标识的数字。

四、SYS_CONNECT_BY_PATH()

不得不介绍一下非常牛波依的SYS_CONNECT_BY_PATH()函数,我们可以得到层次结构或者说树状结构的 路径, 参见如下:

selectemp, mgr,LEVEL, SYS_CONNECT_BY_PATH(emp,'/') pathfromt_hierarchical t

STARTWITHemp=1CONNECTBYPRIOR emp=mgr;

11/1212/1/2323/1/2/3434/1/2/3/4634/1/2/3/6523/1/2/5

五、CONNECT_BY_ISLEAF

非常好用的CONNECT_BY_ISLEAF虚列。何谓LEAF(叶子),即没有任何节点隶属于该节点:

selectemp, mgr,LEVEL, SYS_CONNECT_BY_PATH(emp,'/') pathfromt_hierarchical twhereCONNECT_BY_ISLEAF=1STARTWITHemp=1CONNECTBYPRIOR emp=mgr;

434/1/2/3/4634/1/2/3/6523/1/2/5

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值