問題本文
"商品"表に対する SQL 文と同じ結果が得られる SELECT 文はどれか。 【商品表】(商品 ID, 商品名称, 仕入先 ID, 単価) [SQL 文] SELECT FROM 商品 WHERE 仕入先 ID IN ('M002', 'M004')
選択肢
- ア.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'
正解
ウ. SELECT FROM 商品 WHERE 仕入先ID = 'M002' OR 仕入先ID = 'M004'
解説
IN 演算子はカッコ内に列挙した値のいずれかに一致する行を選ぶため、OR で個別の等価条件を結ぶ書き方と論理的に等価です。元のSQLは「仕入先ID が 'M002' か 'M004' のどちらか」を意味するので、これを OR で展開した選択肢ウが同じ結果を返します。
選択肢ごとの解説
- ア.AND で結ぶと「同じ列が同時に 'M002' かつ 'M004'」となり、1行で2つの値を同時に持つことは不可能なため結果は常に空集合になります。
- イ.INTERSECT は両方の結果に共通する行のみを返しますが、仕入先ID が同時に2値を持つ行は存在しないため結果は空集合となります。
- ウ.IN ('M002','M004') を OR に展開した形であり、両者は意味も結果も完全に一致するため正解です。
- エ.BETWEEN 'M002' AND 'M004' は文字列の辞書順で 'M003' なども含めてしまうため、IN による厳密な2値指定とは結果が異なります。
基本情報技術者試験 令和7年度 科目A 公開問題 の過去問一覧へ戻る・問6