ORDER SIBLINGS BY 句を使用して、選択した列の値で結果セットを並べ替え、兄弟を昇順または降順で並べ替えることができます。 この ORDER BY 句の特殊なケースは、階層クエリでのみ使用できます。

前節のクエリをさらに変更して、ORDER SIBLINGS BY ename ASC を追加します。

SELECT LEVEL, LPAD (' ', 2 * (LEVEL - 1)) || ename "employee", empno, mgr
FROM emp START WITH mgr IS NULL
CONNECT BY PRIOR empno = mgr
ORDER SIBLINGS BY ename ASC;

最後のクエリで出力は、兄弟が名前の昇順で表示されるように変更されます。 兄弟 BLAKE、CLARK、および JONESは、KING の下でアルファベット順に配置されます。 兄弟 ALLEN、JAMES、MARTIN、TURNER、および WARD は、BLAKE の下でアルファベット順に配置されます。 他の列の値も同様に並べ替えられます。

 level |  employee   | empno | mgr
-------+-------------+-------+------
     1 | KING        |  7839 |
     2 |   BLAKE     |  7698 | 7839
     3 |     ALLEN   |  7499 | 7698
     3 |     JAMES   |  7900 | 7698
     3 |     MARTIN  |  7654 | 7698
     3 |     TURNER  |  7844 | 7698
     3 |     WARD    |  7521 | 7698
     2 |   CLARK     |  7782 | 7839
     3 |     MILLER  |  7934 | 7782
     2 |   JONES     |  7566 | 7839
     3 |     FORD    |  7902 | 7566
     4 |       SMITH |  7369 | 7902
     3 |     SCOTT   |  7788 | 7566
     4 |       ADAMS |  7876 | 7788
(14 rows)

次に示す最後の例では、クエリは WHERE 句を使用し、3 つのルートノードで始まります。 ノードツリーが構築された後、WHERE 句ではツリー内の行を除外して結果セットを形成します。

SELECT LEVEL, LPAD (' ', 2 * (LEVEL - 1)) || ename "employee", empno, mgr
FROM emp WHERE mgr IN (7839, 7782, 7902, 7788)
START WITH ename IN ('BLAKE','CLARK','JONES')
CONNECT BY PRIOR empno = mgr
ORDER SIBLINGS BY ename ASC;

クエリの出力は、BLAKE、CLARK、および JONES を含む 3 つのレベル 1 のルートノードを示しています。 さらに、WHERE 句で指定された基準を満たさない行は出力から削除されています。

 level | employee  | empno | mgr
-------+-----------+-------+------
     1 | BLAKE     |  7698 | 7839
     1 | CLARK     |  7782 | 7839
     2 |   MILLER  |  7934 | 7782
     1 | JONES     |  7566 | 7839
     3 |     SMITH |  7369 | 7902
     3 |     ADAMS |  7876 | 7788
(6 rows)