WITH (SQL)
メイン・クエリ内でサブクエリを簡単に使用できるようにする共通テーブル式を指定する節。
構文
WITH subquery-alias1 AS (subquery1),
subquery-alias2 AS (subquery2),
...
[main-query]
引数
引数 | 説明 |
---|---|
subquery-alias | 共通テーブル式のエイリアス。有効な識別子である必要があります。 |
subquery | 共通テーブル式を構成するサブクエリ。このサブクエリは、1 つ以上のメイン・クエリで使用できます。 |
main-query | 任意の SELECT コマンド。このクエリ内で、subquery-alias を使用して、共通テーブル式を利用できます。 |
説明
WITH 節は共通テーブル式 (CTE) を定義し、別のクエリ内でサブクエリを簡単に参照できるようにします。これらのサブクエリは "メイン・クエリ" で参照できます。メイン・クエリは、SELECT 文でなければなりません。1 つの WITH 節内に複数の CTE をコンマで区切って定義できます。CTE は、WITH 節内で前にある他の CTE を参照できます。
CTE は JOIN の使用をサポートしています。UNION を使用して、CTE の結果とテーブルのコンテンツを結合することもできます。
EXPLAIN コマンドを使用して、CTE のクエリ・プランを表示できます。
データベース・ドライバ経由で WITH 節を使用するクエリを実行する場合は、バージョン要件を満たすデータベース・ドライバを使用する必要があります。特に、JDBC バージョン 3.10.1 を使用してください。最新リリースに付属の ODBC ドライバもこのバージョン要件を満たしています。
例
以下は、1 つの CTE を使用する基本的な例です。
WITH cte1 AS (SELECT * FROM Rooms)
SELECT ID FROM cte1
以下の例は、1 つの WITH 節内で複数の CTE をコンマで区切って定義する方法を示しています。
WITH cte1 AS (SELECT Age FROM Occupants),
cte2 AS (SELECT ID FROM Occupants)
SELECT * FROM cte2
以下の例は、JOIN コマンドを使用する CTE を示しています。
WITH joincte AS
(SELECT Occupants.Species, Rooms.FavFood FROM Occupants FULL JOIN Rooms ON Occupants.ID=Rooms.ID)
SELECT * FROM joincte
以下の例は、UNION コマンドを使用する CTE を示しています。
WITH cte1 AS (SELECT ID FROM Rooms)
SELECT ID FROM cte1 UNION SELECT * FROM cte1
以下の例は、サブクエリを別のサブクエリから参照する方法を示しています。
WITH cte1 AS (SELECT * FROM Occupants),
ctewithincte AS (SELECT Age FROM cte1)
SELECT * FROM ctewithincte