修了試験 2013-01-27実施分 基本情報技術者試験 問33
"商品"表,"在庫"表に対する次のSQL文と,同じ結果が得られるSQL文はどれか。 ここで,(主キー)を付けた項目は主キーを表す。 SELECT 商品番号 FROM 商品 WHERE 商品番号 NOT IN (SELECT 商品番号 FROM 在庫) 商品|商品番号(主キー)|商品名|単価/在庫|在庫番号(主キー)|商品番号|在庫数
正答4
解説
正解は4です。 元のSQL文は、「在庫」表に一度も現れない商品番号を「商品」表から取り出すものです。 つまり、在庫が登録されていない商品の商品番号を求めています。 NOT INと同じ意味は、相関副問合せを使ったNOT EXISTSで表せます。 【選択肢別解説】 1:× 副問合せが外側の表と関連付けられていないので、「商品」表に1行でもあればEXISTSは常に真です。 結果は「在庫」表のすべての商品番号になり、在庫のある商品を返してしまいます。 2:× 1と同じく副問合せが外側と関連付けられていません。 「商品」表に1行でもあればNOT EXISTSは常に偽となり、1行も返りません。 3:× 商品番号が一致する在庫行が存在する商品を取り出すので、在庫がある商品の商品番号になります。 これはNOT INではなくINと同じ結果で、求める結果と逆です。 4:○ 「商品」表の各行について、同じ商品番号の在庫行が存在しないときだけ取り出しています。 これは在庫に現れない商品番号を求める元のSQL文と同じ結果になります。 【ポイント】 EXISTSは、副問合せの結果が1行以上あれば真になる述語です。 外側の表の列を副問合せで参照する相関副問合せにすることで、行ごとの判定ができます。まとめて解く
修了試験 2013-01-27実施分を通しで解く(80問)→