Oracle 层次查询-学习笔记

2014-11-24 18:20:39 · 作者: · 浏览: 0

层次查询


--自连接: 通过表的别名,将同一张表视为不同的表,然后再利用等值、不等值连接


自连接 SQL> selecte.ename||'的老板是'||d.ename


2 from emp e, emp d


3 where e.mgr=d.empno;


层次方式--打印树状结构,起始指明了根为KING的编号7839



层次查询:结决了自连接的性能问题


1 select level, empno, ename,sal, mgr -- level出现必须有connect by 子句


2 from emp -- prior 指前一次查询


3 connect by prior mgr=empno --连接条件【判断本次查询的mgr 是否等于 上次查询结界中的 empno】


4 start with empno=7369 --给定第一次查询条件


5 order by level --按级别升序排序


示例:




由于起始指定的mgr=7698产生了多个结果,所以第二级后就出现了重复



--精确显示时间间隔 【months_between函数】


select ename,sysdate-hiredate 天, (sysdate-hiredate)/7 星期, months_between(sysdate,hiredate) 月, months_between(sysdate,hiredate)/12 年 from emp