問題プレビューID: 5655b57a

問 31

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

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

商品(商品番号, 商品名, 単価) 在庫(在庫番号, 商品番号, 在庫数)

解説

元の SQL 文は,“商品”表の商品番号のうち,“在庫”表に存在しないもの(在庫のない商品)を求めるものである。NOT IN の代わりに相関サブクエリと NOT EXISTS を使い,“商品”表の各行について“在庫”表に同じ商品番号が存在するかどうかを判定し,存在しない行を選べば同じ結果が得られる。

  • アとイは FROM 句が“在庫”表であり,選択の対象となる表が異なる。
  • ウは EXISTS を用いているため,在庫に存在する商品を選ぶことになり,元の SQL 文とは逆の結果になる。
  • エは 商品.商品番号 = 在庫.商品番号 という相関条件で“在庫”表を検索し,該当行が存在しない商品番号を NOT EXISTS で選ぶので,元の SQL 文と同じ結果になる。

したがって,正解は「エ」である。