修了試験 2016-01-24実施分 基本情報技術者試験 問28
"商品"表,"在庫"表に対する次のSQL文の結果と同じ結果が得られるSQL文はどれか。 ここで,(主キー)を付けた項目は主キーを表す。 SELECT 商品番号 FROM 商品 WHERE 商品番号 NOT IN (SELECT 商品番号 FROM 在庫) 商品:商品番号(主キー)|商品名|単価/在庫:倉庫番号(主キー)|商品番号(主キー)|在庫数
正答4
解説
正解は4です。 問題のSQL文は、"在庫"表に現れない商品番号を"商品"表から取り出します。 つまり、どの倉庫にも在庫が登録されていない商品の商品番号を求めています。 同じ結果は、"商品"表の各行について、同じ商品番号の行が"在庫"表に存在しないことをNOT EXISTSで調べても得られます。 NOT EXISTSの副問合せには、外側の表の行と結び付ける条件(相関)が必要です。 【選択肢別解説】 1:× 副問合せに"商品"表との結び付けの条件がありません。"商品"表に1行でもあればEXISTSは常に真となり、"在庫"表の全商品番号が出力されるので誤りです。 2:× 副問合せに結び付けの条件がないので、"商品"表に行がある限りNOT EXISTSは常に偽です。 結果は空になり、元のSQL文と一致しません。 3:× 相関の条件は正しいものの、EXISTSなので在庫が存在する商品を取り出します。 元のSQL文とは逆の結果になります。 4:○ "商品"表の各行について、同じ商品番号の行が"在庫"表に存在しない場合だけ取り出します。 元のNOT INと同じ結果になるので正しいです。 【ポイント】 NOT INの副問合せは、NOT EXISTSの相関副問合せに書き換えられます。 副問合せの結果にNULLがあると両者の結果は異なりますが、本問の商品番号は"在庫"表の主キーの一部なのでNULLになりません。まとめて解く
修了試験 2016-01-24実施分を通しで解く(80問)→