Skip to main content

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

関連項目

FeedbackOpens in a new tab