戦国IT - 情報処理技術者試験の過去問対策サイト
お知らせお問い合わせ料金プラン

応用情報技術者 2023年 秋期 午前229


問題文

“製品” 表と “在庫” 表に対し、次の SQL文を実行した結果として得られる表の行数は幾つか。  
SELECT DISTINCT 製品番号 FROM 製品
 WHERE NOT EXISTS (SELECT 製品番号 FROM 在庫
  WHERE 在庫数 > 30 AND 製品.製品番号 = 在庫.製品番号)
応用情報技術者 2023年 秋期 午前2 問29の問題画像

選択肢

1
2(正解)
3
4

製品表と在庫表のSQL文の結果行数【午前2 解説】

要点まとめ

  • 結論:SQL文は「在庫数が30を超える在庫が存在しない製品番号」を抽出し、結果は2行となる。
  • 根拠:NOT EXISTS句は「在庫数 > 30かつ製品番号が一致する行が存在しない」製品を選ぶため、条件に合う製品を表から探す。
  • 差がつくポイント:在庫表の複数倉庫の在庫数を個別に評価し、どこかに30超の在庫があれば除外される点を正確に理解すること。

正解の理由

このSQLは「製品表の製品番号のうち、在庫表において在庫数が30を超えるものが存在しない製品番号」を抽出します。
在庫表を確認すると、在庫数が30を超える製品は「CC5001(200, 40)」「ZZ9900(130)」と「AB1805(150)」です。
「XZ3000」は30以下の在庫数(30と20)なので条件に合致しません。
よって、在庫数が30を超える在庫が存在しない製品は「MZ1000」と「XZ3000」の2つであり、結果は2行です。
したがって、正解はです。

よくある誤解

在庫数の合計を考えてしまいがちですが、SQL文は個々の在庫行で条件を判定します。
また、在庫数がちょうど30のものは条件に含まれず、30を超えるかどうかがポイントです。

解法ステップ

  1. 製品表の全製品番号をリストアップする。
  2. 在庫表から「在庫数 > 30」かつ「製品番号が一致する」行を探す。
  3. そのような行が存在しない製品番号を抽出する。
  4. 抽出された製品番号の数を数える。

選択肢別の誤答解説

  • ア(1):在庫数が30を超える製品が複数あるため1行は少なすぎる。
  • イ(2):正解。条件に合致する製品番号は2つ。
  • ウ(3):在庫数が30を超える製品を除外すると3つは多すぎる。
  • エ(4):製品表の全製品数は5だが、条件に合うのは2つだけなので誤り。

補足コラム

SQLのNOT EXISTS句はサブクエリの結果が空の場合に真となるため、存在しない条件を表現するのに便利です。
また、DISTINCTは重複排除のため、同じ製品番号が複数行あっても1行としてカウントされます。

FAQ

Q: 在庫数が30の製品は抽出されますか?
A: いいえ、条件は「在庫数 > 30」なので30は含まれません。
Q: 複数倉庫の在庫数を合計して判定しますか?
A: いいえ、SQL文は個々の在庫行で判定し、合計は考慮しません。

関連キーワード: SQL, NOT EXISTS, DISTINCT, サブクエリ、在庫管理、条件検索
← 前の問題へ次の問題へ →
戦国ITクイズ機能

\ せっかくなら /

応用情報技術者
クイズ形式で学習しませんか?

クイズ画面へ遷移する

すぐに利用可能!

©︎2026 情報処理技術者試験対策アプリ

このサイトについてプライバシーポリシー利用規約特商法表記開発者について