基本情報技術者試験 - 令和6年7月修了 - 問20
“商品” 表,“在庫” 表に対する次のSQL文の結果と同じ結果が得られるSQL文はどれか。ここで,下線部は主キーを表す。
SELECT 商品番号 FROM 商品
WHERE 商品番号 NOT IN (SELECT 商品番号 FROM 在庫)
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文とは逆の結果を返してしまいます。
分野 : テクノロジ系 › 技術要素 › データベース › データ操作
解説 :
元のSQL文は,商品表から,在庫表に存在しない商品番号を持つ商品を選び出すものです。NOT IN句を使ったこのSQL文と同じ結果を得るためには,商品表の各行について,在庫表の中にその商品番号が存在しないことを確認するNOT EXISTS句を使った相関副問合せで書き換えることができます。
「エ」はまさにこの形になっており,商品表と在庫表の商品番号を関連付けたうえで,対応する在庫データが存在しない商品を選び出しています。これが正解です。
「ア」と「イ」は在庫表を主な取得元としており,商品を軸にした問合せになっていないため,求める結果とは異なります。
「ウ」はEXISTS句を使っており,在庫表に対応するデータが存在する商品,つまり在庫のある商品を選び出す形になっているため,元のSQL文とは逆の結果を返してしまいます。