サブクエリの操作¶
サブクエリは、別のクエリ内のクエリです。 FROM または WHERE 句のサブクエリは、含まれるクエリによって返されるデータを制限または比較/評価するために使用されるデータを提供するために使用されます。
このトピックの内容:
サブクエリのタイプ¶
スカラーサブクエリと非スカラーサブクエリ¶
サブクエリは、 スカラー または 非スカラー に分類することもできます。
スカラーサブクエリは、単一の値(1行の1列)を返します。返される資格のある行がない場合、サブクエリは NULL を返します。
非スカラーサブクエリは、0、1、または複数の行を返します。各行には1または複数の列が含まれる場合があります。各列で、返す値がない場合、サブクエリは NULL を返します。返される資格のある行がない場合、サブクエリは NULLs ではなく0行を返します。
Snowflakeでサポートされたタイプ¶
Snowflakeは現在、次のタイプのサブクエリをサポートしています。
サブクエリ演算子¶
サブクエリ演算子 は、ネストされたクエリ式を操作します。これらは、次の値を計算するために使用できます。
スカラーサブクエリ¶
スカラーサブクエリは、最大で1行を返すサブクエリです。スカラーサブクエリは、 SELECT リスト、 GROUP BY 句、または WHERE または HAVING 句の関数への引数を含む、値式を表示できる任意の場所に表示できます。
使用上の注意¶
スカラーサブクエリでは、 SELECT リストに1つのアイテムのみを含めることができます。
スカラーサブクエリが複数の行を返す場合、ランタイムエラーが生成されます。
現在、相関スカラーサブクエリは、1行を返すように静的に決定できる場合にのみサポートされます(例えば、 SELECT リストに GROUP BY のない集約関数が含まれる場合)。
非相関スカラーサブクエリは、値式が許可される場所であればどこでもサポートされます。
FLATTEN 内に相関があるサブクエリは現在サポートされていません。
LIMIT / FETCH 句は、無相関スカラーサブクエリでのみ許可されます。
例¶
この例は、WHERE 句の基本的な非相関サブクエリを示しています。
SELECT employee_id FROM employees WHERE salary = (SELECT max(salary) FROM employees);
この例は、FROM句の非相関サブクエリを示しています。この基本的なサブクエリは、 international_GDP
テーブルの情報のサブセットを返します。全体的なクエリでは、仕事の年収がその国のper_capita_GDPと同じである「高賃金」国の仕事がリストされます。
SELECT p.name, p.annual_wage, p.country FROM pay AS p INNER JOIN (SELECT name, per_capita_GDP FROM international_GDP WHERE per_capita_GDP >= 10000.0) AS pcg ON pcg.per_capita_GDP = p.annual_wage AND p.country = pcg.name;
制限事項¶
サブクエリにはさまざまな SELECT ステートメントを含めることができますが、次の制限があります。
一部の句は、ANY/ALL/NOT EXISTS サブクエリ内では許可されません。
LIMIT / FETCH 句を許可するサブクエリの唯一のタイプは、無相関スカラーサブクエリです。また、無相関スカラーサブクエリは1行のみを返すため、LIMIT 句にはサブクエリ内の実用価値がほとんどまたはまったくありません。