基本情報技術者試験過去問 令和7年度(2025年)科目A問6
“商品”表に対するSQL文と同じ結果が得られるSELECT文はどれか。

〔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'
選択肢
- ア
- イ
- ウ
- エ
正解と解き方・学習ポイント(AI解説)
仕入先ID IN ('M002','M004')は、仕入先IDがM002またはM004の行を取り出す条件です。同じ意味に書き換えると、仕入先ID='M002' OR 仕入先ID='M004'になります。ANDやINTERSECTは同じ行が両方の条件を同時に満たす必要があり0件になりやすく、BETWEENは範囲条件になるため一致しません。
Point
この問題は、IN句の意味を正しく読み取り、同じ抽出結果になる条件(OR)と、結果が変わる条件(AND、INTERSECT、BETWEEN)を区別できるかを確認する問題です。
解くために必要な知識
この問題を解くには、SQLのWHERE句における条件指定(IN、OR、ANDなど)の意味を理解している必要があります。
用語の整理
| 用語名 | 意味 |
|---|---|
| SQL | データベースを操作するための言語です。 |
| SELECT文 | 表から行を抽出する命令です。 |
| WHERE句 | 抽出する行の条件を指定する部分です。 |
| IN | 指定したリスト内の値のいずれかに一致するかを判定します。 |
| OR | 複数条件のうち、少なくとも1つが真なら真になります。 |
他の選択肢に出てくる用語
| 用語名 | 意味 |
|---|---|
| AND | 複数条件がすべて真のときだけ真になります。 |
| INTERSECT | 2つのSELECT結果の共通部分だけを返す集合演算子です。 |
| BETWEEN | 指定した下限以上、上限以下の範囲に入るかを判定します。 |
IN句とORの対応
対応関係
次は同じ意味です。
-
仕入先ID IN ('M002', 'M004')
-
仕入先ID = 'M002' OR 仕入先ID = 'M004'
一般形
-
列 IN (A, B, C)
-
列 = A OR 列 = B OR 列 = C
図表の読み取り方
1. 条件で使っている列を特定する
この問題では「仕入先ID」です。
2. 条件に一致する行がどれかを確認する
画像の表では、仕入先IDがM002の行とM004の行が抽出対象になります。
問題の解法手順
問題の注目点は、IN句が「指定した値のいずれかに一致」を表すことです。
図表の読み取り
表の確認
画像の「商品」表には、少なくとも次の列があります。
-
商品ID
-
商品名称
-
仕入先ID
-
単価
条件に関係する列
SQL文の条件は「仕入先ID」列に対して指定されています。
解く手順
1. IN句の意味を言い換える
次のSQLは、仕入先IDがM002またはM004の行を抽出します。
WHERE 仕入先 ID IN ('M002', 'M004')
2. 同じ意味になる条件式を選ぶ
IN ('M002', 'M004') は次と同じ意味です。
仕入先ID = 'M002' OR 仕入先ID = 'M004'
3. 他の選択肢が一致しない理由を確認する
ANDは同時成立が必要、INTERSECTは共通部分、BETWEENは範囲指定になるため、IN句と一致しません。
選択肢ごとの解説
- ア:不正解
ANDは両方の条件を同時に満たす必要があります。仕入先IDが同時に'M002'かつ'M004'になることはないため、抽出結果は0行になります。よって誤りです。
- イ:不正解
INTERSECTは2つのSELECT結果の共通部分だけを返します。仕入先ID='M002'の行と仕入先ID='M004'の行が同じ行として共通になることはないため、抽出結果は0行になります。よって誤りです。
- ウ:正解
ORはどちらか一方を満たせば抽出します。これはIN ('M002','M004')と同じ条件になるため、問題のSQL文と同じ結果になります。よって正解です。
- エ:不正解
BETWEENは範囲指定です。'M002'以上'M004'以下で判定されるため、文字列の並びによっては'M003'なども含まれる可能性があり、IN句と一致しません。よって誤りです。
まとめ
仕入先ID IN ('M002','M004')は、仕入先IDがM002またはM004の行を取り出す条件です。同じ意味に書き換えると、仕入先ID='M002' OR 仕入先ID='M004'になります。ANDやINTERSECTは同じ行が両方の条件を同時に満たす必要があり0件になりやすく、BETWEENは範囲条件になるため一致しません。
ANDは両方の条件を同時に満たす必要があります。仕入先IDが同時に'M002'かつ'M004'になることはないため、抽出結果は0行になります。よって誤りです。
INTERSECTは2つのSELECT結果の共通部分だけを返します。仕入先ID='M002'の行と仕入先ID='M004'の行が同じ行として共通になることはないため、抽出結果は0行になります。よって誤りです。
ORはどちらか一方を満たせば抽出します。これはIN ('M002','M004')と同じ条件になるため、問題のSQL文と同じ結果になります。よって正解です。
BETWEENは範囲指定です。'M002'以上'M004'以下で判定されるため、文字列の並びによっては'M003'なども含まれる可能性があり、IN句と一致しません。よって誤りです。