实例:查询员工姓名和员工老板姓名
分析:老板也是员工,在员工表中。是查询的同1张表
MGR列表示老板的员工编号
写法1:
select e.ename 员工姓名,b.ename 老板姓名
from emp e,emp b
where e.mgr = b.empno;
写法2:外连接-左连接
select e.ename||' report for '|| b.ename "关系"
from emp e,emp b
where e.mgr = b.empno(+);
关系
写法3:
select e.ename||' report for '|| b.ename "关系"
from emp e left outer join emp b
on e.mgr=b.empno;
关系
写法4:层次查询,效率较高
select e.ename||' report for '|| prior ename
from emp
start with empno=7839 --规定遍历从属关系树的起点,boss
connect by prior empno = mgr; -- 规定了遍历的方向
写法5:使用函数 SYS_CONNECT_BY_PATH 将关系直观些
select lpad('',2*level-1)||SYS_CONNECT_BY_PATH(ENAME,'/') "关系"
from emp
start with empno = 7839
connect by prior empno = mgr;
关系