平成26年度 春期 午前 問28
”商品”表、”在庫”表に対する次の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 商品.商品番号 = 在庫.商品番号 )
EXISTS演算子についての問題です。
EXISTSは、副問い合わせの結果が存在する(結果が1レコード以上ある)場合、真になります。
設問のSQL文
SELECT 商品番号 FROM 商品
WHERE 商品番号 NOT IN ( SELECT 商品番号 FROM 在庫 )
は、INと副問い合わせを使用しています。
商品テーブルの商品番号が、在庫テーブルの商品番号と一致しないレコードを抽出しています。
ア 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 商品 )となっており、在庫テーブルの全レコードのケースに、常に商品テーブルの全レコードが返されるため、すべて真となります。
つまり、商品テーブルに1件以上レコードがあれば、アは、在庫テーブルの全レコードが結果となり、イは抽出結果0件となるため、設問のSQL文とは違った結果になると判断できます。
ウとエは、副問い合わに、WHEREが指定されています。
EXISTS ( SELECT 商品番号 FROM 在庫
WHERE 商品.商品番号 = 在庫.商品番号 )
設問のSQL文は、商品テーブルの商品番号と、在庫テーブルの商品番号を条件にしています。
ウとエの副問い合わせは、設問と同じ項目を比較しています。
設問はNOT INとなっており、在庫テーブルの商品番号の中に、商品テーブルの商品番号が存在しない場合を抽出するようになっています。
EXITSTは、存在する場合なので、NOTを付けることで、存在しない場合、になります。
よって、エが正解だと判断できます。
ACCESSで検証してみた結果です。
テストデータ。
設問の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 商品.商品番号 = 在庫.商品番号 )
出典:平成26年度 春期 基本情報処理技術者試験 午前 問28
コメント 0