によるPostgreSQL再帰クエリの学習概要:このチュートリアルでは、再帰共通テーブル式またはCteを使用したPostgreSQL再帰クエリについて学習します。

PostgreSQL再帰クエリの概要

PostgreSQLには、クエリで使用する補助文を構築できるWITH文が用意されています。

これらのステートメントは、多くの場合、共通テーブル式またはCteと呼ばれます。 Cteは、クエリの実行中にのみ存在する一時テーブルのようなものです。

再帰クエリは、再帰CTEを参照するクエリです。 再帰クエリは、組織構造、部品表などの階層データのクエリなど、多くの状況で役立ちます。

再帰CTEの構文を次に示します:

Code language: SQL (Structured Query Language) (sql)

再帰CTEには3つの要素があります:

  • 非再帰的な用語:非再帰的な用語は、CTE構造体の基本結果セットを形成するCTEクエリ定義です。
  • : 再帰用語は、UNION演算子またはUNION ALL演算子を使用して非再帰用語と結合された1つ以上のCTEクエリ定義です。 再帰的な用語は、CTE名自体を参照します。
  • 終了チェック:前の反復から行が返されない場合、再帰は停止します。

PostgreSQLは、次の順序で再帰CTEを実行します:

  1. 非再帰的な用語を実行して、基本結果セット(R0)を作成します。
  2. riを入力として再帰項を実行し、結果セットRi+1を出力として返します。
  3. 空のセットが返されるまでステップ2を繰り返します。 (終了チェック)
  4. 結果セットR0,R1,…Rnの和集合またはUNION ALLである最終結果セットを返す

PostgreSQL再帰クエリの例

PostgreSQL再帰クエリを示すために新しいテーブルを作成します。

Code language: SQL (Structured Query Language) (sql)

employeesテーブルには、employee_idmanager_id、およびfull_nameの3つの列があります。 manager_id列は、従業員のマネージャー idを指定します。

次のステートメントは、サンプルデータをemployeesテーブルに挿入します。

Code language: PHP (php)

次のクエリは、id2を持つマネージャーのすべての部下を返します。

Code language: SQL (Structured Query Language) (sql)

どのように動作しますか:

  • 再帰CTEであるdefailentsは、1つの非再帰的な用語と1つの再帰的な用語を定義します。
  • 非再帰的な用語は、idが2の従業員である基本結果セットR0を返します。
Code language: SQL (Structured Query Language) (sql)

再帰的な用語は、従業員id2の直接の従属を返します。 これは、employeesテーブルと従属CTEの間で結合された結果です。 再帰的な用語の最初の反復では、次の結果セットが返されます:

Code language: SQL (Structured Query Language) (sql)

PostgreSQLは再帰的な用語を繰り返し実行します。 再帰メンバーの2回目の反復では、上記のステップの結果セットを入力値として使用し、この結果セットを返します:

Code language: SQL (Structured Query Language) (sql)

id16、17、18、19、および20の従業員に従業員レポートがないため、3回目の反復では空の結果セットが返されます。

PostgreSQLは、非再帰的および再帰的な用語によって生成された最初と2番目の反復ですべての結果セットの和集合である最終結果セットを返します。

このチュートリアルでは、再帰Cteを使用してPostgreSQLの再帰クエリを構築する方法を学習しました。

  • このチュートリアルは役に立ちましたか?
  • はい

コメントを残す

メールアドレスが公開されることはありません。

Previous post シェンロン復活!
Next post LinuxにPuTTYをインストールする方法