サブクエリ

副照会とは、照会文の中でネストした照会ブロックとして括弧で囲まれた select 式です。

このようなネストした照会ブロックは、次に挙げる SQL 文で使用できます。
  • 選択
  • INSERT
  • 削除
  • 更新
  • CREATE TABLE AS
  • INSERT INTO
  • SELECT INTO

副照会は任意の深さにネストすることが可能です。

副照会を含んでいる親照会のことを、スーパー照会 または外側の照会 といいます。 親照会が同じであるそれぞれの副照会は、複数の結果セットを導出するために使用され、親照会と組み合わせて評価できます。

副照会は、さらに以下のカテゴリーに分類されます。
行副照会
1 つの行 (または 0 行) と複数の列を返し、SELECT リストまたは条件式で、比較演算子の引数などとして使用されます。
表副照会
複数の行 (0 から n 行) と複数の列を返し、FROM 節内で、または EXISTS、IN、ANY、ALL テストの引数として使用できます。
例えば、「会社全体の売上の 1 % を超える売上を記録した店舗をすべてリストする」という式は、次の例のように SQL 照会の中に照会を組み込む形式でスカラー副照会を使用して記述できます。
   SELECT StoreId FROM Stores
   WHERE TotalSale > 0.01*
   (SELECT SUM(TotalSales) FROM Stores);

システムは、最初に内側の副照会の売上合計を計算し、外側の照会を実行するときにその結果を使用します。

シングルトン副照会
1 つの行 (またはゼロ行)、1 つの列の表というフォーマットで、ただ 1 つの値を返します。

これらすべての副照会に対して、システムが評価を行ったうえで、select 式を計算し、値を保存します。 スーパー照会を実行する際、ここで算出された値が副照会の代わりに使用されます。

一方、相関副照会 は、外側の照会を参照する (または相関関係を持つ) 形式の照会内の照会です。 相関副照会が指定されている場合、システムは、外側の表から行が選択されるたびに 1 回ずつ繰り返して副照会を評価します。