SQL WITH 句は、Oracle 9i リリース 2 データベースで Oracle によって導入されました。 SQL WITH 句を使用すると、サブクエリ ブロックに名前を付けることができます (サブクエリ リファクタリングとも呼ばれるプロセス)。この名前は、メイン SQL クエリ内の複数の場所で参照できます。
- この句は、一時的な関係の出力が利用可能になるように、一時的な関係を定義するために使用され、WITH 句に関連付けられたクエリによって使用されます。
- 関連付けられた WITH 句を持つクエリは、ネストされたサブクエリを使用して作成することもできますが、その場合、SQL クエリの読み取り/デバッグがより複雑になります。
- WITH 句はすべてのデータベース システムでサポートされているわけではありません。
- サブクエリに割り当てられた名前は、インライン ビューまたはテーブルであるかのように扱われます。
- SQL WITH 句は、Oracle 9i リリース 2 データベースで Oracle によって導入されました。
構文:
WITH temporaryTable (averageValue) as (SELECT avg(Attr1) FROM Table) SELECT Attr1 FROM Table, temporaryTable WHERE Table.Attr1>一時テーブル.平均値;>>

このクエリでは、WITH 句を使用して、属性averageValue を 1 つだけ持つ一時リレーションtemporaryTable を定義します。 AverageValue は、リレーションテーブルに記述されている列 Attr1 の平均値を保持します。 WITH 句に続く SELECT ステートメントは、リレーション テーブルの Attr1 の値が WITH 句ステートメントから取得した平均値より大きいタプルのみを生成します。
Javaのリターンコマンド
注記: WITH 句を含むクエリが実行されると、まず句内で指定されたクエリが評価され、この評価の出力が一時的なリレーションに格納されます。これに続いて、生成された一時的なリレーションを使用する、WITH 句に関連付けられたメイン クエリが最終的に実行されます。
クエリ
JavaのHelloプログラム
例 1: 給与が全従業員の平均給与より高い従業員をすべて検索します。
関係の名前: 従業員
| 従業員ID | 名前 | 給料 |
|---|---|---|
| 100011 | スミス | 50000 |
| 100022 | 請求書 | 94000 |
| 100027 | 彼自身 | 70550 |
| 100845 | ウォールデン | 80000 |
| 115585 | エリック | 60000 |
| 1100070 | ケイト | 69000 |
SQL クエリ:
WITH temporaryTable(averageValue) as (SELECT avg(Salary) from Employee) SELECT EmployeeID,Name, Salary FROM Employee, temporaryTable WHERE Employee.Salary>一時テーブル.平均値;>>
出力:
でこぼこした標準偏差
| 従業員ID | 名前 | 給料 |
|---|---|---|
| 100022 | 請求書 | 94000 |
| 100845 | ウォールデン | 80000 |
説明: 全従業員の平均給与は 70591 です。したがって、取得した平均よりも高い給与を持つすべての従業員が出力関係にあります。
例 2: その航空会社の全パイロットの給与総額が、データベース内の全パイロットの給与総額の平均より高い航空会社をすべて検索します。
関係の名前: パイロット
| 従業員ID | 航空会社 | 名前 | 給料 |
|---|---|---|---|
| 70007 | エアバス 380 | キム | 60000 |
| 70002 | ボーイング | ローラ | 20000 |
| 10027 | エアバス 380 | 意思 | 80050 |
| 10778 | エアバス 380 | ウォーレン | 80780 |
| 115585 | ボーイング | スミス | 25000 |
| 114070 | エアバス 380 | ケイティ | 78000 |
SQL クエリ:
部分文字列文字列java
WITH totalSalary(Airline, total) as (SELECT Airline, sum(Salary) FROM Pilot GROUP BY Airline), airlineAverage(avgSalary) as (SELECT avg(Salary) FROM Pilot ) SELECT Airline FROM totalSalary, airlineAverage WHERE totalSalary.total>航空会社平均.avg給与;>>
出力:
| 航空会社 |
|---|
| エアバス 380 |
説明: エアバス 380 の全パイロットの合計給与 = 298,830、ボーイングの合計給与 = 45000。テーブル パイロット = 57305 の全パイロットの平均給与。エアバス 380 の全パイロットの合計給与のみが得られる平均給与より大きいため、次のようになります。エアバス380は出力関係にあります。
重要な点:
- SQL WITH 句は、単純な SQL ステートメントではなく、複雑な SQL ステートメントで使用する場合に適しています。
- また、複雑な SQL クエリをより小さなクエリに分割できるため、複雑なクエリのデバッグと処理が容易になります。
- SQL WITH 句は基本的に、通常のサブクエリのドロップイン置換です。