--需求-1:
--员工编号、员工姓名、上级领导编号、上级领导姓名、自连接SELECT e.empno, m.ename
FROM emp e, emp m
WHERE e.mgr=m.empno;
2、递归
1)求出员工编号为7369的所有上级领导
--需求-2:
--求出员工编号为7369的所有上级领导SELECT empno, ename
FROM emp e
START WITH empno=7369
CONNECT BY empno=PRIOR mgr;
2)求出员工编号为7369的所有下属
--需求-3:
--求出员工编号为7369的所有下属SELECT empno, ename
FROM emp e
START WITH empno=7369
CONNECT BYPRIOR empno= mgr;
3)求出各个员工的所有上级领导
--需求-4:
--求出各个员工的所有上级领导SELECT a1.*, (
SELECT SUBSTR(SYS_CONNECT_BY_PATH(empno, '->'), 3) NAME_PATH
FROM emp a
WHERE a.mgr ISNULL
START WITHa.empno = a1.empno
CONNECT BYPRIOR a.mgr = a.empno
) AS NAME_PATH
FROM emp a1;
4)取编号为104001008002城市的所有上级城市 南关区
--需求5:
--取编号为104001008002城市的所有上级城市 南关区SELECT*FROM china
WHERE c_id =104001008002;
------LEVEL可以对得到的所有上级/下级进行排序,可以表示出层级大小
------SYS_CONNECT_BY_PATH()可以用指定的分隔符对各层级进行分隔SELECT c_id, c_name, LEVEL,
SYS_CONNECT_BY_PATH(c_name, '->')
FROM china
START WITH c_id =104001008002
CONNECT BY c_id =PRIOR superior_c_id;
5)查询中南地区各下级城市列表
--需求6:
--查询中南地区各下级城市列表SELECT 中南地区下级城市列表,
REGEXP_SUBSTR(中南地区下级城市列表, '[^->]+', 1, 1)地区,
REGEXP_SUBSTR(中南地区下级城市列表, '[^->]+', 1, 2)省份,
REGEXP_SUBSTR(中南地区下级城市列表, '[^->]+', 1, 3)城市,
REGEXP_SUBSTR(中南地区下级城市列表, '[^->]+', 1, 4)区县
FROM(
SELECT c_id, c_name, LEVEL le,
SYS_CONNECT_BY_PATH(c_name, '->') as 中南地区下级城市列表
FROM china
START WITH c_id =104
CONNECT BYPRIOR c_id = superior_c_id
)
where le=4;