oracle递归展示层级
时间: 2023-07-04 20:22:02 浏览: 105
oracle层次查询
在Oracle中,我们可以使用递归查询来展示数据的层级关系。如果我们有一个包含层级关系的表,例如员工表`EMP`,其中每个员工都有一个上级经理,我们可以使用递归查询来显示每个员工的层级关系。
下面是一个使用递归查询来展示员工层级关系的示例。我们假设员工表`EMP`如下:
```
EMPNO ENAME JOB MGR
1 John Manager NULL
2 Bob Clerk 1
3 Alice Clerk 1
4 Tom Analyst 2
5 Mary Analyst 3
6 Jack Salesman 1
```
我们可以使用以下递归查询来展示每个员工的层级关系:
```
WITH emp_tree AS (
SELECT empno, ename, job, mgr, 0 AS level
FROM emp
WHERE mgr IS NULL
UNION ALL
SELECT emp.empno, emp.ename, emp.job, emp.mgr, emp_tree.level + 1
FROM emp_tree
JOIN emp ON emp.mgr = emp_tree.empno
)
SELECT LPAD(' ', 4*level)||ename AS ename, level
FROM emp_tree
ORDER BY level, empno;
```
在上面的查询中,我们首先定义了一个递归公共表达式`emp_tree`,其中包含了所有顶级经理的信息。然后我们使用`UNION ALL`运算符将顶级经理和他们的直接下属组合在一起,并将`level`设置为0。接下来,我们使用`JOIN`运算符将每个下属与其直接上级经理连接起来,并将`level`设置为上级经理的`level + 1`。最后,我们从递归公共表达式`emp_tree`中选择每个员工的姓名和级别,并使用`LPAD`函数来设置每个员工的缩进,以展示层级关系。
执行以上查询的结果如下:
```
ENAME LEVEL
--------------- -----
John 0
Bob 1
Tom 2
Alice 1
Mary 2
Jack 1
```
在这个结果中,我们可以看到每个员工的姓名和级别,以及由缩进表示的层级关系。其中,顶级经理的级别为0,直接下属的级别为1,间接下属的级别为2。
阅读全文