SQL-如何将具有上下级关系的数据表转化为树形图,清晰的看出各级人员的关系

1、需求:对于scott用户的emp表,以KING为一级人员,找出所有人员的等级关系。并能清晰的找出每个人的上下级。

2、分析及解答

在上一篇博客中讲到,使用分层查询可以很好的找到每个人员所在层级,代码及结果如下:

select
level,
empno,
ename,
sal,
hiredate,
mgr,
(prior ename) as mgr_name,  --返回ename上一级的信息
(prior sal) mgr_sal   --返回sal上一级的信息
from emp 
start with mgr is null  --以哪一行为根节点
connect by (prior empno)=mgr   --分层条件,定义上下级关系
order by level;   --以level升序排列

在这里插入图片描述
从上图中,我们能看出每个人处于第几级,但是貌似还看不出某一个人的上下级是谁。。。。
在分层查询中,存在两个伪列,分别是levelconnect_by_isleaf
若以每一行作为一个节点,而以KING作为根节点, 那么:

  • level:表示每一行(节点)在第几层。
  • connect_by_isleaf:表示对于当前节点而言,有没有子节点。【1无0有】

在分层查询中,存在着独有的排序方式,即order siblings by col_name,故具有清晰上下级关系的查询及查询结果如下:

select
level,
(lpad(' ',(level-1)*2,' ')||empno)  树形图,   --根据层级左填充空格,以展示树形
empno,
ename,
connect_by_isleaf 是否有,    --1无0有
(case connect_by_isleaf when 1 then '没有子树'
else '有子树' end) 是否有子树,
sal,
hiredate,
mgr,
(prior ename) as mgr_name,
(prior sal) mgr_sal
from emp 
start with mgr is null
connect by (prior empno)=mgr
order siblings by empno;    --在转换成树形图之后,根据树形关系排序
--order by empno     --根据查询结果的empno排序

在这里插入图片描述

通过分层查询,可以清晰的找出各级人员及其上下级关系。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值