Oracle 11g Release 1 (11.1) SQL_层级查询(概)


本文内容

  • 演示层级查询
  • 层级查询(Hierarchical Queries)
  • 参考

演示层级查询

了解层级查询的意义在于,可以省去程序的递归代码。写递归总是很烦人。

假设在 Oracle 的 scott 用户下,用 EMP 表演示层级查询。该表包含某个员工及其上级。全部内容如下:

EMP 表

职位最高的当然是主席 PRESIDENT

然后是经理 MANAGER

其次是分析师 ANALYST

最后是营业员 CLEAK 和销售人员 SALESMAN

示例 1:演示员工编号为 7566 的员工及其所有下属。

select t.empno as 员工编号,
       t.ename as 员工姓名,
       t.job as 职位,
       t.mgr as 上级编号,
       level
  from emp t
 start with t.empno = 7566
connect by prior t.empno = t.mgr;

演示员工编号为 7566 的员工及其所有下属。

示例 2:演示员工编号为 7566 的所有下属。

select t.empno as 员工编号,
       t.ename as 员工姓名,
       t.job   as 职位,
       t.mgr   as 上级编号
  from emp t
 start with t.mgr = 7566
connect by prior t.empno = t.mgr;

演示员工编号为 7566 的所有下属。

示例 3:演示员工编号为 7876 员工及其所有上级。

select t.empno as 员工编号,
       t.ename as 员工姓名,
       t.job   as 职位,
       t.mgr   as 上级编号
  from emp t
 start with t.empno = 7876
connect by prior t.mgr = t.empno;

演示员工编号为 7876 员工及其所有上级。

从上面演示可以看出,层级查询既可以“向下”查询,也可以“向上”查询,类似“递归”。

  • 示例 1 所示,“向下找”,则

start with t.empno = 7566 指定根节点;而 connect by prior t.empno = t.mgr 指定节点的关系,上级编号等于当前的员工编号。

  • 示例 3 所示,“向上找”,则

start with t.empno = 7876 指定根节点;而 connect by prior t.mgr = t.empno 指定节点的关系。员工编号等于当前员工的上级编号。

  • 1
  • 2
  • 下一页

相关内容