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

基本情報技術者 2025年 科目A06


問題文

“商品”表に対するSQL文と同じ結果が得られるSELECT文はどれか。
〔SQL文〕  SELECT * FROM 商品 WHERE 仕入先ID IN ('M002', 'M004')
基本情報技術者 2025年 科目A 問06の問題画像

選択肢

SELECT * FROM 商品 WHERE 仕入先ID = 'M002' AND 仕入先ID = 'M004'
SELECT * FROM 商品 WHERE 仕入先ID = 'M002' INTERSECT SELECT * FROM 商品 WHERE 仕入先ID = 'M004'
SELECT * FROM 商品 WHERE 仕入先ID = 'M002' OR 仕入先ID = 'M004'(正解)
SELECT * FROM 商品 WHERE 仕入先ID BETWEEN 'M002' AND 'M004'

🔒 解説は解答すると表示されます

IN句の等価表現【午前解説】

正解の理由

SELECT ... WHERE 仕入先ID IN ('M002','M004') は、仕入先ID が 'M002' または 'M004' の行を抽出します。従って、これと同じ結果を返すのは OR を使った選択肢であり、選択肢(仕入先ID = 'M002' OR 仕入先ID = 'M004')が等価です。実際に該当する行は「S002(M002)」「S005(M004)」「S006(M004)」の3行になります。
例(等価なSQL):
SELECT * FROM 商品
WHERE 仕入先ID = 'M002' OR 仕入先ID = 'M004';

解法ステップ

  1. IN句の意味を確認する:IN('A','B') は「列がAまたはBである」を表す(論理和)。
  2. 各選択肢を論理演算で比較する:
    • = と AND の組合せは「同時に両方の値である」を意味する(ありえない)。
    • INTERSECT は2つの結果の共通部分を取る(同じ行が両方の条件を満たす必要がある)。
    • OR は「いずれか一方を満たす」=INと同義。
    • BETWEEN は範囲指定なので、文字列の順序により中間の値も含まれる可能性がある。
  3. 上記を当てはめ、IN と等価なのは OR を使った選択肢と判断する。

選択肢別の誤答解説

  • ア: SELECT ... WHERE 仕入先ID = 'M002' AND 仕入先ID = 'M004'
    AND は「両方を同時に満たす」必要があるため、単一列に2つの異なる値が同時に入ることはなく、結果は空になります。INの意味とは逆です。
  • イ: SELECT ... WHERE 仕入先ID = 'M002' INTERSECT SELECT ... WHERE 仕入先ID = 'M004'
    INTERSECT は2つの結果の共通部分を返します。仕入先IDが同一行で 'M002' かつ 'M004' となる行はないため、これも結果は空になります。INTERSECTは集合の共通部分を取る操作で、INの「いずれか」に対応しません。
  • ウ: SELECT ... WHERE 仕入先ID = 'M002' OR 仕入先ID = 'M004'
    ここが正解です。OR(論理和)は「どちらか一方または両方」を満たす行を返すため、INと等価になります。選択肢は にあたります。
  • エ: SELECT ... WHERE 仕入先ID BETWEEN 'M002' AND 'M004'
    BETWEEN は範囲(下限以上かつ上限以下)を意味します。文字列比較では 'M002' ≤ 値 ≤ 'M004' に該当する 'M003' も含まれるため、M003 の行(S003、S004)まで余分に抽出され、IN の結果とは異なります。

よくある誤解

  • AND と OR を取り違える:複数条件を書くとき、AND は「同時に満たす」、OR は「どちらかを満たす」。IN は OR と同義であると覚えておくこと。
  • INTERSECT を OR の代わりに使う誤り:INTERSECT は集合の交差を取る(ANDに近い集合演算)ため、同列の異なる値を並列に扱う場合は空集合になりやすい。
  • BETWEEN の文字列挙挙動の誤解:BETWEEN は数値だけでなく文字列でも機能し、コレーション順(辞書順)に基づいて範囲を決めるため、見た目では想定外の行が含まれることがある。

補足コラム

  • IN と OR は基本的に同等ですが、可読性の点で複数値の比較には IN を使う方が明快です。値の数が多い場合、IN のほうが長くなりにくく可読性が保たれます。
  • NULL を含む場合の挙動に注意:列が NULL の場合、等価比較は UNKNOWN になり除外されます。IN に NULL を含めた場合の扱いも注意が必要です。
  • BETWEEN は上下限ともに包含(inclusive)です。文字列や日付で範囲指定するときは境界を意識して使いましょう。

FAQ

Q1: IN と OR は常に同じ結果になりますか?
A1: 単純な等価比較では同じ結果になります。ただし NULL の扱いやサブクエリを含むケースでは微妙な違いが出ることがあるため注意してください。
Q2: BETWEEN は上下の値を含みますか?
A2: はい。BETWEEN は下限と上限を含みます(inclusive)。
Q3: パフォーマンス面で IN と OR の違いはありますか?
A3: 多くのデータベースではオプティマイザが同等に扱いますが、値の数が非常に多い場合はINの方が可読性と最適化の面で有利になることがあります。インデックス利用やクエリ計画を確認すると良いです。

関連キーワード: SQL、WHERE句、IN句、OR、BETWEEN、INTERSECT、論理演算子
← 前の問題へこの年度をクイズで解く次の問題へ →
戦国ITクイズ機能

\ せっかくなら /

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

クイズ画面へ遷移する

すぐに利用可能!

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

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