相関副問合せとは?そうかんふくといあわせ
相関副問合せとは、副問合せの内側から、外側の問合せの列を参照する形の副問合せ。外側の行が1件確定するたびに内側が評価し直されるため、内側だけを単独で実行することはできない。行ごとに比較の基準そのものが変わる条件を、1つのSQL文で表現できるのが採用理由になる。
最終更新:2026-10-06
この語が出る過去問を解く →背景
グループごとの最大値を求めるだけならGROUP BYと集約関数で足りる。しかし「その最大値を持つ行の氏名や入社日まで欲しい」となると、集約した結果には元の行の他の列が残っていないため書けない。相関副問合せは、行を1件ずつ見ながらその行が属するグループを基準に判定するという、集約とは逆向きの発想で同じ要求を満たす。
具体例
各部門で最高給与の社員を出すなら、社員表をS1として、WHERE 給与 =(SELECT MAX(給与) FROM 社員 S2 WHERE S2.部門コード = S1.部門コード)と書く。内側のWHERE句に外側の別名S1が現れている点が相関であり、ここを定数に置き換えると全社の最高給与になって意味が変わる。
試験での引っ掛け
非相関副問合せとの判別点は「内側に外側の別名が現れるか」の一点で、現れなければ内側は1回だけ評価される。もう一つはNOT INとNOT EXISTSの違いで、副問合せの結果にNULLが1件でも混じるとNOT INは1行も返さないのに対し、NOT EXISTSは意図どおり動く。
関連用語
出た過去問
出典:令和5年度 秋期 応用情報技術者試験 午前 問29(IPA)解説で登場
“製品”表と“在庫”表に対し、次のSQL文を実行した結果として得られる表の行数は幾つか。SELECT DISTINCT 製品番号 FROM 製品 WHERE N…
正解:2
要点:NOT EXISTSは副問合せが空になる行だけを残す
NOT EXISTSは、相関副問合せが1行も返さない製品だけを残す。在庫数が30を超える行を持つ製品はAB1805(150)、CC5001(200と40)、ZZ9900(130)の3つで、XZ3000は30と20なので条件を満たさず、MZ1000は在庫表に行がない。したがって結果に残るのはMZ1000とXZ3000の2行である。
出典・参考
公式シラバスの3 技術要素 > 3. データ操作 > (2) データベース言語に掲載されている用語です。
解説は資格暗記が独自に作成しています。過去問の出典は各問題に記載のとおりです。