基本情報技術者試験 - 令和7年公開問題 - 問6
“商品” 表に対するSQL文と同じ結果が得られるSELECT文はどれか。
商品
〔SQL文〕
SELECT * FROM 商品 WHERE 仕入先 ID IN('M002','M004')
商品
| 商品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')
| ア | 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' |
答え : ウ
分野 : テクノロジ系 › 技術要素 › データベース › データ操作
解説 :
SQL文の書き換えに関する問題です。元のSQL文は「仕入先IDがM002またはM004である商品を取得する」という条件をIN演算子で表しています。これと同じ結果を得るには,OR演算子を使って「仕入先ID=M002 OR 仕入先ID=M004」と書くことができ,正解は選択肢「ウ」です。
「ア」はANDで繋いでいるため,一つの行が同時にM002でもM004でもあることは有り得ず,結果が常に空になってしまいます。「イ」のINTERSECTは両方の条件を同時に満たす行の共通部分を求める演算であり,これもM002かつM004という条件になってしまうため,結果は空になります。「エ」のBETWEENはM002からM004までの範囲内の値をすべて含む条件になるため,M003なども含まれてしまい,元のSQL文とは異なる結果になります。IN演算子はOR演算子の集合と同じ意味を持つという基本を押さえておくと解きやすい問題です。
分野 : テクノロジ系 › 技術要素 › データベース › データ操作
解説 :
SQL文の書き換えに関する問題です。元のSQL文は「仕入先IDがM002またはM004である商品を取得する」という条件をIN演算子で表しています。これと同じ結果を得るには,OR演算子を使って「仕入先ID=M002 OR 仕入先ID=M004」と書くことができ,正解は選択肢「ウ」です。
「ア」はANDで繋いでいるため,一つの行が同時にM002でもM004でもあることは有り得ず,結果が常に空になってしまいます。「イ」のINTERSECTは両方の条件を同時に満たす行の共通部分を求める演算であり,これもM002かつM004という条件になってしまうため,結果は空になります。「エ」のBETWEENはM002からM004までの範囲内の値をすべて含む条件になるため,M003なども含まれてしまい,元のSQL文とは異なる結果になります。IN演算子はOR演算子の集合と同じ意味を持つという基本を押さえておくと解きやすい問題です。