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>
00845
説明:すべての従業員の平均給与は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メインページに表示されるあなたの記事を参照してくださいし、他のオタクを助けます。