相関副問合せとEXISTSとは?
相関副問合せとEXISTSとは、副問合せの中で外側の問合せの列を参照する形式を相関副問合せという。外側の行ごとに内側が評価されるため、行単位の「存在するか」を判定できる。EXISTSは副問合せが1行でも返せば真となる述語で、相関副問合せと組み合わせて使うのが定番である。
情報処理安全確保支援士試験の過去問では1回出題されています。
そうかんふくといあわせとえぐじすつ
相関副問合せとEXISTSの意味
副問合せの中で外側の問合せの列を参照する形式を相関副問合せという。外側の行ごとに内側が評価されるため、行単位の「存在するか」を判定できる。EXISTSは副問合せが1行でも返せば真となる述語で、相関副問合せと組み合わせて使うのが定番である。
相関副問合せとEXISTSの具体例
「SELECT * FROM 顧客 C WHERE EXISTS(SELECT * FROM 受注 O WHERE O.顧客番号 = C.顧客番号)」は、受注が1件でもある顧客だけを取り出す。NOT EXISTSに変えれば、受注が1件もない顧客の抽出になる。
相関副問合せとEXISTSは試験でどう引っ掛けられる?
非相関の副問合せは1回だけ評価されるが、相関副問合せは外側の行ごとに評価される点が違う。またEXISTSは行の有無だけを見るので、内側のSELECT句に何を書いても結果は変わらない。
相関副問合せとEXISTSと関連する用語
相関副問合せとEXISTSが出た過去問
“従業員”表に対して、SQL文を実行して得られる結果はどれか。ここで、実線の下線は主キーを表し、表中のNULLは値が存在しないことを表す。 〔SQL文〕 SEL…
正解:S002, S004, S007
要点:NOT EXISTSの相関副問合せは部下を持たない行を抽出する
このSQLは、相関副問合せで「自分の従業員コードを上司として持つ行が存在しない」従業員、すなわち部下を一人も持たない従業員を抽出します。表では上司欄にS001・S003・S005・S006が現れるので、これらは部下を持つ従業員です。残るS002・S004・S007が誰の上司にもなっていないため、これらが結果として得られます。
出典:令和7年度 春期 情報処理安全確保支援士試験 am2 問21(IPA)
最終更新:2026-08-25/解説は資格暗記が独自に作成しています。 過去問の出典は各問題に記載のとおりです。