基本情報技術者試験 - 令和6年7月修了 - 問20

“商品” 表,“在庫” 表に対する次のSQL文の結果と同じ結果が得られるSQL文はどれか。ここで,下線部は主キーを表す。

SELECT 商品番号 FROM 商品
 WHERE 商品番号 NOT IN (SELECT 商品番号 FROM 在庫)

商品
商品番号商品名単価
  在庫
倉庫番号商品番号在庫数
アSELECT 商品番号 FROM 在庫
 WHERE EXISTS (SELECT 商品番号 FROM 商品)
イSELECT 商品番号 FROM 在庫
 WHERE NOT EXISTS (SELECT 商品番号 FROM 商品)
ウSELECT 商品番号 FROM 商品
 WHERE EXISTS (SELECT 商品番号 FROM 在庫
  WHERE 商品.商品番号 = 在庫.商品番号)
エSELECT 商品番号 FROM 商品
 WHERE NOT EXISTS (SELECT 商品番号 FROM 在庫
  WHERE 商品.商品番号 = 在庫.商品番号)
答え : エ
分野 : テクノロジ系 › 技術要素 › データベース › データ操作
解説 :
元のSQL文は,商品表から,在庫表に存在しない商品番号を持つ商品を選び出すものです。NOT IN句を使ったこのSQL文と同じ結果を得るためには,商品表の各行について,在庫表の中にその商品番号が存在しないことを確認するNOT EXISTS句を使った相関副問合せで書き換えることができます。

「エ」はまさにこの形になっており,商品表と在庫表の商品番号を関連付けたうえで,対応する在庫データが存在しない商品を選び出しています。これが正解です。

「ア」と「イ」は在庫表を主な取得元としており,商品を軸にした問合せになっていないため,求める結果とは異なります。

「ウ」はEXISTS句を使っており,在庫表に対応するデータが存在する商品,つまり在庫のある商品を選び出す形になっているため,元のSQL文とは逆の結果を返してしまいます。
ホーム画面への追加方法
1.ブラウザの 共有ボタンのアイコン 共有ボタンをタップ
2.メニューの「ホーム画面に追加」をタップ
閉じる