過去問解きまくり研究所 ホーム

平成22年度 春期 午前 問31

データベース

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

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

商品                                 在庫
 _商品番号_│商品名│単価           _在庫番号_│商品番号│在庫数
答えと解説を見る

✓ これが正解エSELECT 商品番号 FROM 商品 WHERE NOT EXISTS (SELECT 商品番号 FROM 在庫 WHERE 商品.商品番号 = 在庫.商品番号)

解説

在庫に現れない商品番号を、相関した否定で書き換えます。

もとの問合せが取り出しているのは、商品表にある商品番号のうち、在庫表のどこにも現れないものです。ここを NOT EXISTS で書き直すときは、三つのことをそろえる必要があります。第一に、取り出す先は商品表のままであること。第二に、内側の問合せが外側の一行ごとに評価され、その行の商品番号と在庫表の商品番号を突き合わせていること。第三に、突き合わせて見つからなかったときだけ残す向きになっていることです。この三つを満たす形が、外側を商品表とし、内側で二つの表の商品番号が等しい行を探し、それが存在しないときに残す書き方になります。判定の軸は、どの表から取り出すか、内側が外側の行と結び付いているか、そして有無のどちらを残すかの三点です。

ほかの選択肢はなぜ違うのか

出典:平成22年度 春期 基本情報技術者試験 午前 問31

この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)