データベース
基本情報技術者試験 科目A免除 修了試験 20221211 実施分 問27
“商品”表,“在庫”表に対する次の 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 商品.商品番号 = 在庫.商品番号)
出典:基本情報技術者試験 科目A免除 修了試験 20221211 実施分 問27
答えと解説を見る
正解:エ
覚える知識
SQLのNOT INとNOT EXISTSの等価性
NOT IN (SELECT ...) は、結合条件付きの NOT EXISTS (SELECT ...) と等価に書き換えられる。
この問題で必要なこと
NOT INの副問合せは、相関副問合せのNOT EXISTSで同じ結果になる。商品番号の結合条件が必要である。
ひっかけ
結合条件のないEXISTSは条件が常に同じ真偽になる。外側表が商品表か在庫表かも取り違えやすい。
この知識の出題:本試験系 2 回・免除試験 6 回(公開問題での観測値)