修了試験 2020-12-13実施分 基本情報技術者試験 問28
“商品”表,“在庫”表に対する次のSQL文の結果と同じ結果が得られるSQL文はどれか。 ここで,(主キー)を付けた項目は主キーを表す。 SELECT 商品番号 FROM 商品 WHERE 商品番号 NOT IN (SELECT 商品番号 FROM 在庫) 商品:|商品番号(主キー)|商品名|単価 在庫:|倉庫番号(主キー)|商品番号(主キー)|在庫数
正答4
解説
正解は4です。 与えられたSQL文は、在庫表に一度も現れない商品番号、つまり「在庫のない商品」の商品番号を商品表から取り出します。 NOT INによる副問合せは、相関副問合せとNOT EXISTSを使って同じ意味に書き換えられます。 各選択肢が「在庫表に存在しない商品番号」を返すかを確かめます。 【選択肢別解説】 1:× 在庫表から商品番号を取り出しており、副問合せも商品表と在庫表を関連付けていません。 商品表に1行でもあればEXISTSは常に真になり、在庫表の全商品番号が返ります。 2:× 副問合せが外側の表と関連付けられていないので、商品表に1行でもあればNOT EXISTSは常に偽になります。 結果は空になり、在庫のない商品は求められません。 3:× 商品番号が一致する在庫行が存在する商品を取り出すので、「在庫のある商品」になります。 求める結果とは正反対です。 4:○ 商品表の各行について、同じ商品番号の在庫行が存在しない場合だけ取り出します。 これは「在庫表にない商品番号」を返すので、元のSQL文と同じ結果になります。 【ポイント】 「〜にないもの」は、NOT INでもNOT EXISTSと相関副問合せでも表せます。 EXISTSの副問合せでは、WHERE句で外側の表と結び付けているか(相関しているか)を必ず確認しましょう。まとめて解く
修了試験 2020-12-13実施分を通しで解く(80問)→