WHERE句に外部クエリからの値を使用するサブクエリです。

相関サブクエリは、外部クエリによって処理される各行に対して1度評価されます。 SQLデータサービスで仮想テーブルにクエリを実行する場合、相関サブクエリを使用してデータをフィルタまたは変更します。

SELECT * FROM 商品表 AA
           WHERE '20010401' IN
           (SELECT 納品日
            FROM 受注表 BB
            WHERE AA.商品コード = BB.商品コード);

実行結果

 商品コード 商品名 単価
 ───────── ────── ────
 101        BEER   500
 102        JUICE  400
  1. 商品表から商品コードが '101' の行を選択する。
  2. この行を、エイリアス AA の候補行として保存する。
  3. 次にサブクエリを実行する。サブクエリは、受注表全体から商品コード列が AA.商品コード列 (商品コード '101') と一致する行を検索する。次に受注表からこれが TRUE となる行の納品日列を取り出し、納品日値の結果セットを構築する。
  4. 商品コードが '101' である納品日値の値の集合を構築したら、この集合に '20010401' が含まれているかどうかを確認するため、メインクエリの述語を評価する。含まれている場合は (この場合は含まれている)、'101' の行をメインクエリの出力として選択する。
  5. 次に、商品コードが '102' の行を候補行として手続き全体を繰り返す。これを商品表の行が 1つ残らず評価されるまで繰り返す。

このような手続きの結果、重複するデータがあっても表示されなくなります。

メインクエリとサブクエリで同じテーブルを使用する相関サブクエリというものもあります。テーブルの自己相関といいますが、複雑な形式の派生情報を抽出することができます。

参考