階層クエリとは、親子関係を形成するデータに基づいて、結果セットの行を階層順に返すクエリの一種です。

通常、階層は逆ツリー構造で表示されます。 ツリーには相互接続されたノードが含まれます。 各ノードは場合によって、0 個、1 個、または複数個の子ノードに接続されます。 親を持たない最上位ノードを除き、各ノードは 1 つの親ノードに接続されます このノードがルートノードになります。 各ツリーにルートノードを 1 つだけ持ちます。 子ノードを一つも持たないノードは、リーフノードと呼ばれます。 ツリーは常に、少なくとも1つのリーフノードを持ちます。 たとえば、ツリーは単一ノードのみを持ちます。 この場合、このノードはルートとリーフの両方を兼ねます。

階層クエリでは、結果セットの行は 1 つ以上のツリーのノードを表します。

指定された単一行は、1つ以上のツリーに表示される場合があり、そのため結果セットに複数回表示される場合があります。

クエリの階層関係は、CONNECT BY 句で説明されています。 この句は、結果セットの行が返される順序の基礎を形成します。 次の例は、CONNECT BY 句とその関連オプションの句の、SELECT 文における使用例です。

SELECT select_list FROM table_expression [ WHERE ...]
  [ START WITH start_expression ]
    CONNECT BY { PRIOR parent_expr = child_expr |
 child_expr = PRIOR parent_expr }
  [ ORDER SIBLINGS BY column1 [ ASC | DESC ]
      [, column2 [ ASC | DESC ] ] ...
  [ GROUP BY ...]
  [ HAVING ...]
  [ other ...]

select_list は、結果セットのフィールドを構成する 1 つ以上の式です。table_expression は、結果セットの行が生じる 1 つ以上のテーブルまたはビューです。 other は、追加の有効な SELECT 文です。 次のセクションでは、START WITH、CONNECT BY、ORDER SIBLINGS BY など階層クエリに関連する句について説明します。

CONNECT BY 句の AND またはその他の演算子は、Oracle と互換性のある PolarDB データベースのサポート対象外です。