令和7年度 科目A6テクノロジ系

基本情報 令和7年度 科目A 問6:テクノロジ系に関する問題

“商品”表に対するSQL 文と同じ結果が得られるSELECT 文はどれか。 商品 商品ID 商品名称 仕入先ID 単価 S001 冷蔵庫 M001 155,000 S002 食器洗い機 M002 85,000 S003 電子レンジ M003 78,000 S004 炊飯器 M003 32,000 S005 コーヒーメーカー M004 15,000 S006 ホットプレート M004 12,000 〔SQL 文〕 SELECT * FROM 商品 WHERE 仕入先ID IN ('M002', 'M004')

  • aSELECT * FROM 商品 WHERE 仕入先ID = 'M002' AND 仕入先ID = 'M004'
  • bSELECT * FROM 商品 WHERE 仕入先ID = 'M002' INTERSECT SELECT * FROM 商品 WHERE 仕入先ID = 'M004'
  • cSELECT * FROM 商品 WHERE 仕入先ID = 'M002' OR 仕入先ID = 'M004'正答
  • dSELECT * FROM 商品 WHERE 仕入先ID BETWEEN 'M002' AND 'M004'
正答:CSELECT * FROM 商品 WHERE 仕入先ID = 'M002' OR 仕入先ID = 'M004'

AI解説(初心者・標準・上級)

理解度に合わせて3レベルの解説を無料で読めます。

初心者向けまずはここから。やさしく要点を解説

答えは c です。

SQL の `IN ('M002', 'M004')` は「仕入先IDが M002 か M004 のどっちかなら選ぶ」という意味。「OR でつなぐ」のと同じことです。

たとえばお店で「リンゴかバナナをください」と言うのと「リンゴをください、または、バナナをください」と言うのが同じ意味なのと一緒。

👉 覚え方:IN = 「カッコの中のどれか」= OR で並べたのと同じ

ほかの選択肢:a は AND(両方同時)なので「M002 でもあり M004 でもある」となり1件も該当しない/b の INTERSECT は両方の結果の共通部分なので、これも0件/d の BETWEEN は範囲指定で M003 も含まれてしまうので違います。

標準試験対策の基準レベル

なぜこれが正解か

正解は c。SQL の `IN (値1, 値2, ...)`「カラムの値がリスト中のいずれかに一致する」 ことを意味し、論理的に `= 値1 OR = 値2 OR ...` と等価。本問では `仕入先ID IN ('M002', 'M004')` = `仕入先ID = 'M002' OR 仕入先ID = 'M004'`。

各選択肢の解説

  • a:`= 'M002' AND = 'M004'` は同じ列が2つの異なる値を同時に持つことを要求し、論理的に常に偽。結果は0件で IN とは別物。
  • b:`INTERSECT` は2つの SELECT 結果の共通行を返す集合演算子。本問では各 SELECT がそれぞれ異なる仕入先 ID の行だけを返すため共通行はなく0件。
  • c:`OR` 結合で `IN` と等価。正解。
  • d:`BETWEEN 'M002' AND 'M004'` は文字列の辞書順で M002 ≦ x ≦ M004 の範囲を返すので M003 も含まれる。本問では電子レンジ(M003)と炊飯器(M003)の2行が余計に含まれてしまう。

覚え方・ひっかけ注意

IN = OR の省略形/NOT IN = AND の否定/BETWEEN = 範囲(両端含む) をセットで覚える。BETWEEN は 「以上・以下(両端含む)」 で、未満ではないことに注意。AND の選択肢 a は典型的なひっかけで、「2つの値を持つ」を直感的に正解と誤りやすい。

上級誤答論破・背景理論まで深掘り

理論的背景

`IN` 述語は SQL 標準で 「集合に対する所属判定」 を意味し、内部的には OR の連鎖と等価に最適化される。多くの RDBMS では IN リストの要素数が一定(例:PostgreSQL では数百)以下なら配列スキャンに、それ以上なら一時テーブル化して結合に変換される。サブクエリを伴う `IN (SELECT ...)` は半結合(Semi-Join)として実行され、`EXISTS` と等価変換可能だが NULL の扱いで差が出る(後述)。

実務での使われ方

  • インデックス活用:`仕入先ID` に B-Tree インデックスがあれば、IN リストの各値で索引探索(IN-list iteration)が可能。
  • NULL の扱い:`NOT IN (..., NULL)` は SQL の3値論理(True/False/Unknown)により、NULL を含むと全行が Unknown になり結果0件になる罠。実務では `NOT EXISTS` の使用が推奨される。
  • 集合演算子:`UNION`(和集合・重複除去)/`UNION ALL`(重複保持・高速)/`INTERSECT`(積集合)/`EXCEPT`(差集合、Oracle では MINUS)。INTERSECT・EXCEPT は重複除去のためソート処理が走り、`ALL` 修飾でも保持可。
  • BETWEEN の罠:日時範囲で `BETWEEN '2026-01-01' AND '2026-01-31'` とすると 1/31 の00:00:00以降が漏れる。`>= AND <` を使うのが定石。

試験での位置づけ

科目A「データベース」の SQL は毎回必出。基本情報では:

  • 結合(INNER/LEFT OUTER/RIGHT OUTER/FULL OUTER/CROSS/自己結合)
  • 集約関数と GROUP BY・HAVING(HAVING は集約後フィルタ・WHERE との違い)
  • ウィンドウ関数(ROW_NUMBER, RANK, LAG, LEAD, 集約 OVER PARTITION BY)
  • 相関サブクエリ・スカラサブクエリ
  • トランザクション分離レベル(READ UNCOMMITTED〜SERIALIZABLE)
  • 実行計画とインデックス設計

まで深掘り。

選択肢の発展補足

  • `IN` vs `EXISTS`:相関サブクエリでは EXISTS が早期終了するため高速になりがち。最近のオプティマイザは等価変換するため差はほぼなし。
  • `INTERSECT` の代替:`INNER JOIN` や `WHERE ... IN (SELECT ...)` で書ける場合が多く、可読性で選ぶ。
  • `BETWEEN` の文字列辞書順は照合順序(COLLATION)依存。日本語混在では予期せぬ順になる。
  • 派生:`ANY/SOME`(IN の親戚)、`ALL`(全要素一致)も論理演算子としてセットで覚える。
出典・引用について

出典:IPA(情報処理推進機構)公式 基本情報技術者試験 令和7年度 科目A6/ 公的機関配布資料につき出典明記の上引用。解説は合格ナビによる独自AI解説です。

テクノロジ系の他の過去問

1
テクノロジ系
2
テクノロジ系
3
テクノロジ系
4
テクノロジ系
5
テクノロジ系

あなたの弱点を診断して、合格までの最短ルートを

この分野を連続演習し、AIがあなたの弱点を分析。合格ナビなら基本情報の過去問を解きながら学べます。