副問合せとは?
副問合せとは、SQL文の内部に書かれた別のSELECT文。WHERE句、FROM句、SELECT句などに置ける。
データベーススペシャリスト試験の過去問では10回出題されています(2016年度〜2024年度)。
ふくといあわせ
副問合せの意味
SQL文の内部に書かれた別のSELECT文。WHERE句、FROM句、SELECT句などに置ける。
副問合せの具体例
WHERE 部門コード IN (SELECT 部門コード FROM 部門 WHERE 所在地='東京')。
副問合せは試験でどう引っ掛けられる?
IN述語による非相関の副問合せは、EXISTSを使った相関副問合せに等価変換できることが多い。NOT INはNULLが混ざると期待どおりに動かないため、NOT EXISTSのほうが安全。
副問合せと関連する用語
副問合せが出た過去問
次のSQL文と同じ検索結果が得られるSQL文はどれか。 SELECT DISTINCT TBL1.COL1 FROM TBL1 WHERE COL1 IN (S…
正解:SELECT DISTINCT TBL1.COL1 FROM TBL1 WHERE EXISTS (SELECT * FROM TBL2 WHERE TBL1.COL1 = TBL2.COL1)
要点:IN述語の副問合せは相関EXISTSに等価変換できる
IN述語による副問合せは、外側の行の値が副問合せの結果集合に含まれるかを判定するもので、相関副問合せを使ったEXISTS述語に書き換えられる。どちらもTBL2に同じCOL1の値が1件でもあればその行を残すという意味になり、結果は一致する。
出典:平成28年度 春期 データベーススペシャリスト試験 am2 問9(IPA)“社員”表に対して、SQL文を実行して得られる結果はどれか。ここで、実線の下線は主キーを表し、表中の'NULL'は値が存在しないことを表す。 〔社員〕 社員コー…
正解:社員コード: S002, S004, S007
要点:NOT EXISTSの相関副問合せで「部下を持たない社員」を抽出
この副問合せは「自分の社員コードを上司として持つ社員が存在するか」を調べており、NOT EXISTSで否定しているので、誰の上司にもなっていない社員だけが選ばれる。表では上司欄に現れるコードが部下を持つ社員なので、そこに一度も現れない社員が結果になる。
出典:平成30年度 春期 データベーススペシャリスト試験 am2 問5(IPA)“社員”表から、男女それぞれの最年長社員を除く全ての社員を取り出すSQL文とするために、aに入れる字句はどれか。ここで、“社員”表の構造は次のとおりであり、実線…
正解:SELECT MIN(生年月日) FROM 社員 AS S2 WHERE S1.性別 = S2.性別
要点:相関副問合せで同性内の最年長を求め、それより後を選ぶ
性別が同じ社員の中で最も早い生年月日を相関副問合せで求め、それより生年月日が後の社員だけを取り出せば、男女それぞれの最年長者が除かれる。外側の行の性別を副問合せの条件に渡す相関が要点である。
出典:平成30年度 春期 データベーススペシャリスト試験 am2 問10(IPA)ある電子商取引サイトでは、会員の属性を柔軟に変更できるように、“会員項目”表で管理することにした。“会員項目”表に対し、次の条件でSQL文を実行して結果を得る場…
正解:MAX
要点:最新行の採用と横持ち集約の両方をMAXで実現する
同じ会員番号・項目名の中で最も大きい行番号の値を採用するので、内側の副問合せではグループごとの行番号の最大値を求める必要がある。外側では項目名ごとに1行しかない値を1行にまとめるため、集約関数で取り出す。いずれもMAXを入れれば、該当しない場合の値はNULLのまま残る。
出典:令和1年度 春期 データベーススペシャリスト試験 am2 問14(IPA)"社員"表に対して、SQL文を実行して得られる結果はどれか。ここで、実線の下線は主キーを表し、表中のNULLは値が存在しないことを表す。 社員(社員コード(主キ…
正解:S002, S004, S007
要点:NOT EXISTSの相関副問合せで部下を持たない行を抽出
相関副問合せは、外側の行の社員コードを上司として持つ行が存在するかを調べている。NOT EXISTSなのでそれが1件もない社員、すなわち部下を1人も持たない社員が選ばれる。上司列に現れるのはS001・S003・S005・S006なので、残るS002・S004・S007が答えになる。
出典:令和2年度 10月 データベーススペシャリスト試験 am2 問8(IPA)
最終更新:2026-08-25/解説は資格暗記が独自に作成しています。 過去問の出典は各問題に記載のとおりです。