GeeksforGeeks

SQL WITH句は、Oracle9iリリース2データベースでOracleによって導入されました。 SQL WITH句を使用すると、サブクエリブロックに名前を付けることができます(サブクエリリファクタリングとも呼ばれるプロセス)。

  • この句は、この一時的な関係の出力が使用可能であり、WITH句に関連付けられているクエリによって使用されるように、一時的な関係を定義するた
  • 関連付けられたWITH句を持つクエリは、ネストされたサブクエリを使用して記述することもできますが、そうすることで、SQLクエリの読み取り/デバ
  • WITH句は、すべてのデータベースシステムでサポートされていません。
  • サブクエリに割り当てられた名前は、インライン-ビューまたは表であるかのように扱われます
  • SQL WITH句は、Oracle9i release2データベースでOracleによって導入され

構文:

WITH temporaryTable (averageValue) as (SELECT avg(Attr1) FROM Table), SELECT Attr1 FROM Table WHERE Table.Attr1 > temporaryTable.averageValue;

このクエリでは、WITH句は、1つの属性averageValueのみを持つ一時的な関係temporaryTableを定義するために使用されます。 averageValueは、関係テーブルで説明されている列Attr1の平均値を保持します。 WITH句の後に続くSELECTステートメントは、関係テーブルのAttr1の値がWITH句ステートメントから取得された平均値よりも大きいタプルのみを生成します。ノート

: WITH句を持つクエリが実行されると、最初にその句内で言及されたクエリが評価され、この評価の出力が一時的な関係に格納されます。 これに続いて、生成された一時的な関係を使用するWITH句に関連付けられたメインクエリが最終的に実行されます。

クエリ

例1:給与がすべての従業員の平均給与よりも多いすべての従業員を検索します。
リレーションの名前: Employee

EmployeeID Name Salary
100011 Smith 50000
100022 Bill 94000
100027 Sam 70550
100845 Walden 80000
115585 Erik 60000
1100070 Kate 69000

SQL Query:

WITH temporaryTable(averageValue) as (SELECT avg(Salary) from Employee), SELECT EmployeeID,Name, Salary FROM Employee, temporaryTable WHERE Employee.Salary > temporaryTable.averageValue;

Output:tr>

100022 ビル 94000 100022 100022 100022 100022 100022 100022 100022 100022 100022 100022 100022 100022 100022 100022 10002 10002

00845

walden 80000

説明:すべての従業員の平均給与は70591です。 したがって、給与が得られた平均よりも多いすべての従業員は、出力関係にあります。

例2: その航空会社のすべてのパイロットの総給与がデータベース内のすべてのパイロットの総給与の平均よりも多いすべての航空会社を検索します。

リレーションの名前: Pilot

EmployeeID Airline Name Salary
70007 Airbus 380 Kim 60000
70002 Boeing Laura 20000
10027 Airbus 380 Will 80050
10778 Airbus 380 Warren 80780
115585 Boeing Smith 25000
114070 Airbus 380 Katy 78000

SQLクエリ:

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 > airlineAverage.avgSalary;

出力:

航空会社

エアバス380

説明:エアバス380のすべてのパイロットの総給与=298,830とボーイングのそれ=45000。 表Pilot=57305内のすべてのパイロットの平均給与。 エアバス380のすべてのパイロットの合計給与のみが得られた平均給与よりも大きいので、エアバス380は出力関係にあります。

重要なポイント

重要なポイント:

  • SQL WITH句は、単純なSQL文ではなく、複雑なSQL文で使用する場合に適しています
  • また、複雑なSQLクエリを小さなものに分解することができ、複雑なクエ
  • SQL WITH句は、基本的に通常のサブクエリへのドロップイン置換です。

この記事はMayank Kumarによって寄稿されています。 あなたはGeeksforGeeksが好きで、貢献したい場合は、また、使用して記事を書くことができますcontribute.geeksforgeeks.org またはあなたの記事をに郵送して下さい[email protected]….. GeeksforGeeksメインページに表示されるあなたの記事を参照してくださいし、他のオタクを助けます。

Related Posts

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です