問題本文
"商品"表,"在庫"表に対する次の SQL 文の結果と同じ結果が得られる SQL 文はどれか。ここで,下線部は主キーを表す。 SELECT 商品番号 FROM 商品 WHERE 商品番号 NOT IN (SELECT 商品番号 FROM 在庫) 商品(商品番号, 商品名, 単価) 在庫(倉庫番号, 商品番号, 在庫数)
選択肢
- ア.SELECT 商品番号 FROM 在庫 WHERE EXISTS (SELECT 商品番号 FROM 商品)
- イ.SELECT 商品番号 FROM 在庫 WHERE NOT EXISTS (SELECT 商品番号 FROM 商品)
- ウ.SELECT 商品番号 FROM 商品 WHERE EXISTS (SELECT 商品番号 FROM 在庫 WHERE 商品.商品番号 = 在庫.商品番号)
- エ.SELECT 商品番号 FROM 商品 WHERE NOT EXISTS (SELECT 商品番号 FROM 在庫 WHERE 商品.商品番号 = 在庫.商品番号)
正解
エ. SELECT 商品番号 FROM 商品 WHERE NOT EXISTS (SELECT 商品番号 FROM 在庫 WHERE 商品.商品番号 = 在庫.商品番号)
解説
元のSQLは「在庫に存在しない商品番号」を商品表から取り出すクエリです。これは『商品.商品番号に対応する在庫行が存在しない』ことを NOT EXISTS で相関副問合せで表すのと等価です。
選択肢ごとの解説
- ア.FROM が在庫表で、商品表との対応もとっておらず元クエリと結果が一致しません。
- イ.FROM が在庫表である時点で元クエリの対象集合と異なります。
- ウ.EXISTS では在庫に対応行がある商品(=元クエリと逆)が抽出されます。
- エ.商品表をFROMに置き、相関条件で在庫に対応行が「無い」ものを NOT EXISTS で取り出しており、元クエリと等価です。
基本情報技術者試験 平成26年度 春期 午前 の過去問一覧へ戻る・問28