SSブログ

平成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


nice!(0)  コメント(0)  トラックバック(0) 

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。