基本情報技術者試験 - 令和4年12月修了 - 問27
“商品” 表,“在庫” 表に対する次の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文と,同じ結果を得られる別の書き方のSQL文を選ぶ問題です。元のSQL文は,商品表から商品番号を選択し,その商品番号が在庫表の商品番号の集合に含まれていない(NOT IN)という条件で絞り込んでいます。
選択肢「エ」のSQL文は,商品表から商品番号を選択し,その商品番号に対応する行が在庫表の中に存在しない(NOT EXISTS)ことを,商品表と在庫表の商品番号を関連付けるサブクエリを使って確認しています。このNOT EXISTSを使った書き方は,NOT INを使った書き方と論理的に同じ結果を導くことができるため,これが正解です。
「ア」と「イ」は,そもそも在庫表から商品番号を選択するという形になっており,抽出の起点が商品表ではなく在庫表になっているため,元のSQL文とは異なる結果になります。
「ウ」は,EXISTS(存在する)という条件になっており,NOT INの「含まれていない」という条件とは逆の意味になってしまうため誤りです。
分野 : テクノロジ系 › 技術要素 › データベース › データ操作
解説 :
在庫表に存在しない商品番号を商品表から抽出するSQL文と,同じ結果を得られる別の書き方のSQL文を選ぶ問題です。元のSQL文は,商品表から商品番号を選択し,その商品番号が在庫表の商品番号の集合に含まれていない(NOT IN)という条件で絞り込んでいます。
選択肢「エ」のSQL文は,商品表から商品番号を選択し,その商品番号に対応する行が在庫表の中に存在しない(NOT EXISTS)ことを,商品表と在庫表の商品番号を関連付けるサブクエリを使って確認しています。このNOT EXISTSを使った書き方は,NOT INを使った書き方と論理的に同じ結果を導くことができるため,これが正解です。
「ア」と「イ」は,そもそも在庫表から商品番号を選択するという形になっており,抽出の起点が商品表ではなく在庫表になっているため,元のSQL文とは異なる結果になります。
「ウ」は,EXISTS(存在する)という条件になっており,NOT INの「含まれていない」という条件とは逆の意味になってしまうため誤りです。