サブクエリ
副照会とは、照会文の中でネストした照会ブロックとして括弧で囲まれた 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 回ずつ繰り返して副照会を評価します。