Oracle データベースの再帰クエリは非常に便利な技術であり、ツリー構造、組織構造、階層関係などの複雑なデータをクエリする場合によく使用されます。再帰クエリを使用すると、複雑なループ ロジックを使用してレベルごとに移動することなく、1 つの SQL ステートメントを使用してツリー構造全体のクエリを完了できます。
この記事では、Oracle で再帰クエリを実行する方法を紹介し、単純なノード関係をクエリする方法を示す例を示します。
1. 再帰クエリの原理
再帰クエリは、独自のテーブルを結合するという原理に基づいて実装されます。自己結合とは、自分自身を結合するプロセスを指し、再帰的クエリは、自分自身に結合された各レコードの巡回一致によって実現されます。
Oracle では、通常、再帰クエリを実装するためにパブリック式 WITH RECURSIVE または CTE (共通テーブル式) を使用する必要があります。 CTE を通じて、相互に参照できる一連の仮想テーブルを作成できるため、再帰クエリのプロセスが簡素化されます。
2. 再帰的クエリの構文
再帰的クエリの基本的な構文は次のとおりです:
WITH<再帰的パブリック式名>( <再帰的パブリック式の列名>) AS
(
<再帰的パブリック式の初期選択>
UNION ALL
<再帰的パブリック式の再帰部分>
)
<再帰的クエリ本体>
そのうち、再帰的パブリック式には 2 つの部分が含まれます:
(1) 再帰的パブリック式の初期選択: 初期選択は再帰的クエリが開始される位置であり、それは戻り値を返します。再帰的パブリック式で定義された列に一致するレコードのコレクション。
(2) 再帰的パブリック式の再帰的部分: 再帰的部分は再帰的なクエリ プロセスであり、クエリの範囲を徐々に拡大します。
再帰クエリの本体はクエリ ステートメントで構成され、再帰クエリの結果をフィルタリングして表示するために使用されます。
3. 再帰クエリの例
次に、簡単な例を使用して、再帰クエリを使用してノードの関係をクエリする方法を示します。
次の例では、次の構造を持つノード関係テーブルがあると仮定します。
CREATE TABLE node(
id INT PRIMARY KEY,
node_name VARCHAR2(50 ),
parent_id INT
);
このうち、id はノードの一意の識別子を表し、node_name はノードの名前を表し、parent_id は現在のノードの親ノード ID を表します。
ここで、ノードのすべての子ノードをクエリしたいと思います。これを実現するには、再帰クエリを使用できます。
まず、最初の選択肢を見つける必要があります。そこからクエリを開始します。この例では、クエリ ノード ID を 1 として指定し、SQL ステートメントは次のようになります:
WITH node_cte(id, node_name,parent_id, level) AS
(
SELECT id, node_name, parent_id, 1 AS level FROM node WHERE id = 1 UNION ALL SELECT n.id, n.node_name, n.parent_id, level + 1 FROM node n, node_cte c WHERE n.parent_id = c.id
) )
SELECT * FROM node_cte;
この例では、node_cte という名前のパブリック式を作成します。最初の選択では、ノード ID 1 のノード レコードを選択し、そのレベル属性を 1 に設定しました。
再帰部分では、すべての子ノードが見つかるまで、独自のテーブルと現在のパブリック式を接続することによって、段階的に下向きにクエリを実行します。結合条件では、c.id を使用して前のレベルのノード ID を表し、再帰クエリの効果を実現します。
最後に、Select ステートメントを使用してクエリ結果を表示し、次の出力が得られました。
3 Grandchild1 2 3
4 Grandchild2 2 3
5 Child2 1 2
6 Grandchild3 5 3#stendChild4 5 3
# 2 ノード ID 1 のノードから開始して、すべての子ノードがクエリされます、段階的にレベルが上がります。
概要:
この記事では、Oracle データベースの再帰クエリの原理、構文、および例を簡単に紹介します。再帰クエリは効率的で便利なクエリ方法であり、階層データや組織構造を扱う場合に非常に役立ちます。再帰的クエリ テクノロジに精通していると、データの処理と分析をより迅速に行い、データ クエリの効率を向上させることができます。
以上がOracleで再帰クエリを実行する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。