Oracle层次化查询即递归查询适宜应用在由表结构维护层次关系的场合中,通常我们在处理这类问题时一般借助于表的自连接,但是灵活性有限,下面对Oracle层次化查询作一阐述:假定存在一张员工信息表emp,其包含如下字段:empno(员工编号),ename(员工姓名),manger(领导编号),现要求按员工层次顺序显示员工信息。sql代码如下:
select * from emp
start with manger is null
connect by manger=prior empno
order siblings by ename;
empno | ename | manager |
A | A | |
J | J | B |
D | D | B |
E | E | B |
B | B | A |
F | F | B |
G | G | C |
H | H | C |
C | C | A |
下面对上述语句的执行过程作一阐述:
首先根据start with子句确定根节点,在此处根节点通过manger is null确定,
然后根据connect by子句确定层次关系是通过哪些字段进行关联而产生的,在此处为manager=prior empno,
需要重点指出的是prior关键字的含义 ,它指明了递归的方向,prior所在的一侧为level高的一侧,order siblings by指明对处在同一层级的兄弟节点进行排序.