商业智能需要高效地执行复杂的查询,而且这些查询的某些语句必须是从层次数据中得到。比如,emp表的雇员姓名及其经理的姓名可列出组织结构。

✿ 问题的提出

如果表结构的某个列的数据存在层次关系,那么,用户可能需要从某一层查询属于该层及其下属的数据行,那么,我们该如何使用层次查询来显示这些数据结果呢?

✿ 实现技术

Oracle系统支持对层次数据的查询与显示,具体的做法是在SELECT语句后通过增加CONNECT BY来实现。

✿ 实现步骤

先理解所访问的表的数据是否具有层次的关系,然后才能在SELECT语句后增加CONNECT BY子句来实现,比如,下面语句从“ename='KING'”开始,KING级别为1,被他所领导的雇员级别为2,当然下级雇员还在领导另外的雇员,所以查询结果为:

SQL> --下面语句 :
SQL> SELECT ename, mgr, LEVEL
  2  FROM emp
  3  START WITH ename = 'KING'
  4  CONNECT BY PRIOR empno = mgr;

ENAME             MGR      LEVEL
---------- ---------- ----------
KING                           1
JONES            7839          2
SCOTT            7566          3
ADAMS            7788          4
FORD             7566          3
SMITH            7902          4
BLAKE            7839          2
ALLEN            7698          3

✿ 说明

层次查询的要点是CONNECT BY子句,它是关联的关键,另外就是START WITH,它表示从何处开始搜索,例子中“START WITH ename = 'KING'”表示从姓名为KING开始往下搜索。