さらに高度なものとして「相関副問合せ(そうかんふくといあわせ)」があります。これは、外側のメインSQLの各行を評価するたびに、その行のデータ(例えば「部署ID」など)を内側の副問合せに引き渡して処理を実行する仕組みです。「各部署における平均給与より高い給与の社員」を検索する際などに使用され、SQLの動的処理において非常に強力な力を発揮します。
IT試験においては、提示されたSQL文の挙動を理解する問題や、空欄になっているWHERE句の中に適切な副問合せと演算子(= や IN など)を当てはめる問題が出題されます。
試験対策としての重要ポイントは以下の通りです。
・カッコ `( )` で囲むルール:副問合せは必ずカッコで囲んで記述することを覚えておきましょう。
・結果の行数と演算子の不一致(エラー原因):
- スカラサブクエリ(1行のみを返す)には `=` や `>` などの単一値用演算子を使います。
- 複数行を返すサブクエリに対して `=` などを適用すると、実行時にエラーとなります。複数行を返す場合は、必ず `IN` や `EXISTS` などの演算子を組み合わせる必要があります。この制約は記述・選択問題でよく狙われます。
・相関副問合せの理解:「外側のテーブルのエイリアス(別名)を、内側のWHERE句で参照している」構文を見たら、それは相関副問合せであり、1行ずつループ処理を行うような挙動をすることを理解できるようにしましょう。
副問合せのベースとなる「SQL」や「SELECT文」は最重要の関連用語です。また、副問合せの結果リストに対して含まれるかを判定する「IN演算子」、存在するかを判定する「EXISTS演算子」、メインとサブで連動する複雑な「相関副問合せ」、および副問合せを定義として保存し、仮想のテーブルのように扱う「ビュー」も深い繋がりを持っています。