問6 IN 句と同じ結果の SELECT 文

基本情報​技術者試験 令和7年度 公開問題 科目A、全20問のうちの問6。

出典:令和7年度 基本情報技術者試験 公開問題 科目A 問6(表は原本の画像を文字に書き起こした。選択肢イの 3 行の SQL 文は 1 行につないだ)

“商品”表に対する SQL 文と同じ結果が得られる SELECT 文はどれか。

商品
商品 ID商品名称仕入先 ID単価
S0⁠0⁠1冷蔵庫M0⁠0⁠11⁠5⁠5,0⁠0⁠0
S0⁠0⁠2食器洗い機M0⁠0⁠28⁠5,0⁠0⁠0
S0⁠0⁠3電子レンジM0⁠0⁠37⁠8,0⁠0⁠0
S0⁠0⁠4炊飯器M0⁠0⁠33⁠2,0⁠0⁠0
S0⁠0⁠5コーヒーメーカーM0⁠0⁠41⁠5,0⁠0⁠0
S0⁠0⁠6ホットプレートM0⁠0⁠41⁠2,0⁠0⁠0

表は横に送ると続きが見えます。

〔SQL 文〕
SELECT * FROM 商品 WHERE 仕入先 ID IN ('M002', 'M004')
  1. アSELECT * FROM 商品 WHERE 仕入先 ID = 'M0⁠0⁠2' AND 仕入先 ID = 'M0⁠0⁠4'
  2. イSELECT * FROM 商品 WHERE 仕入先 ID = 'M0⁠0⁠2' INTERSECT SELECT * FROM 商品 WHERE 仕入先 ID = 'M0⁠0⁠4'
  3. ウSELECT * FROM 商品 WHERE 仕入先 ID = 'M0⁠0⁠2' OR 仕入先 ID = 'M0⁠0⁠4'
  4. エSELECT * FROM 商品 WHERE 仕入先 ID BETWEEN 'M0⁠0⁠2' AND 'M0⁠0⁠4'
答えと解説を開く

正解はウです。

IN 句は、列の値が括弧の中に並べた値のどれかに一致する行を選びます。〔SQL 文〕では、仕入先 ID が M0⁠0⁠2 か M0⁠0⁠4 の行、つまり S0⁠0⁠2、S0⁠0⁠5、S0⁠0⁠6 の 3 行が選ばれます。「どれか一つに一致する」は、条件を OR でつないだのと同じ意味です。ウも同じ 3 行を返します。正解はウです。

ほかの選択肢が違う理由

  • アAND は両方の条件を同時に満たす行を選びます。1 つの行の仕入先 ID が M0⁠0⁠2 と M0⁠0⁠4 の両方であることはないので、1 行も返りません。
  • イINTERSECT は 2 つの結果の両方に含まれる行だけを残します。M0⁠0⁠2 の行と M0⁠0⁠4 の行に共通の行は無いので、1 行も返りません。
  • エBETWEEN は M0⁠0⁠2 から M0⁠0⁠4 までの範囲なので、間の M0⁠0⁠3 も含みます。S0⁠0⁠3 と S0⁠0⁠4 も選ばれ、5 行になります。

仕組み

IN は OR の書き換えです。値をいくつも並べるときに、OR を何度も書かずに済みます。

集合の演算もあわせて覚えます。UNION は和 (どちらかにある行)、INTERSECT は積 (両方にある行)、EXCEPT は差 (前にあって後ろに無い行) です。この問で UNION を使えば、ウと同じ結果になります。

この問に出る言葉