1、数据表:
现在有一个表,也就是oracle数据库中scott用户下的emp表。
2、需求:如果KING是一级人员,那么其他人分别是几级人员?并获取每个人对应的上级的姓名及工资情况。
3、分析及解答:
对于这种包含上下级关系的表,可以使用分层查询。把每一行都当作是一个节点,将这种上下级关系转换成树状图,每层表示对应的级别。
prior col_name
【返回col_name的父节点的col_name】level
【返回对应层级】connect by 分层条件
【 如何定义上下级关系】start with 根节点满足条件
【以哪一行作为根节点】【大树已在,可以查询某一分支的情况】
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升序排列