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

平成26年度 春期 午前 問28

データベース

SQL文

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

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

〔表の定義〕字に書き起こしたもの(下線部=主キーを 太字 で表す)

商品(商品番号,商品名,単価)
在庫(倉庫番号,商品番号,在庫数)
答えと解説を見る

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

解説

在庫が無い商品を返す文は、行ごとに存在を調べます。

書き換えの問いでは、元の文が何を返すのかを先に日本語の一文にしておくと迷いません。元の文は商品の表から商品番号を取り出し、そのうち在庫の表に現れないものだけを残しています。つまり在庫が一件もない商品の商品番号です。同じことを存在の有無で書き直すと、商品の一行ごとに、その商品番号を持つ在庫の行があるかどうかを調べ、無ければその行を残す、という形になります。ここで欠かせないのが、内側の問合せの中に、外側の表の列と内側の表の列を突き合わせる条件を置くことです。この条件があって初めて、判定が行ごとに行われます。取り出す先が商品の表であること、内側に突き合わせの条件があること、存在しないほうを残していること、この三つを満たす文が正解です。

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

出典:平成26年度 春期 基本情報技術者試験 午前 問28(改変:原典の図表をテキストに書き起こした)

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