次の例は、サンプルアプリケーションの emp テーブルを示しています。 emp テーブルの行は、mgr 列に基づいて階層を形成します。 この列には、従業員のマネージャーの従業員番号が含まれています。 各従業員には最大 1 人のマネージャーがいます。 KING は会社の社長であるため、マネージャーはいません。 KING の mgr 列が null です。 1 人の従業員が複数の従業員のマネージャーである場合があります。 この関係は、典型的なツリー構造の階層的な組織図を形成します。 次の図は、この関係を示しています。
この関係に基づいて階層クエリを形成するために、SELECT 文には次の句が含まれています。CONNECT BY PRIOR empno = mgr。 たとえば、会社の社長 KING の従業員番号が 7839 である場合、mgr 列が 7839 であるすべての従業員は KING に報告します。 この場合、JONES、BLAKE、CLARK は、KING の子ノードであるため、適格な従業員です。 同様に、従業員 JONES の場合、mgr 列が 7566 と一致する他のすべての従業員は JONES の子ノードです。 この例では、適格な従業員は SCOTT と FORD です。
組織図の最上部は KING なので、このツリーにはルートノードが 1 つあります。 START WITH mgr IS NULL 句は、初期ルートノードとして KING のみを選択します。
次の例は、完全な SELECT 文を示しています。
SELECT ename, empno, mgr
FROM emp
START WITH mgr IS NULL
CONNECT BY PRIOR empno = mgr;
クエリ出力の行は、各ブランチをルートからリーフに移動し、上から下、左から右に移動します。 次の例は、このクエリの出力を示しています。
ename | empno | mgr
--------+-------+------
KING | 7839 |
JONES | 7566 | 7839
SCOTT | 7788 | 7566
ADAMS | 7876 | 7788
FORD | 7902 | 7566
SMITH | 7369 | 7902
BLAKE | 7698 | 7839
ALLEN | 7499 | 7698
WARD | 7521 | 7698
MARTIN | 7654 | 7698
TURNER | 7844 | 7698
JAMES | 7900 | 7698
CLARK | 7782 | 7839
MILLER | 7934 | 7782
(14 rows)