平成27年度秋期 問29 / 80

平成27年度 秋期 応用情報技術者試験 午前 問29

“倉庫別商品在庫集計”表から在庫数の合計を求めたい。倉庫番号'C003'の倉庫で在庫数が100以上の商品に対して,全ての倉庫における在庫数の合計を求めるSQL文のaに入る適切な字句はどれか。ここで,該当する商品は複数存在するとともに在庫数が100未満の商品も存在するものとする。また,実線の下線は主キーを表す。

倉庫別商品在庫集計(倉庫番号,商品コード,在庫数) ※主キーは「倉庫番号,商品コード」

〔SQL文〕

SELECT 商品コード, SUM(在庫数) AS 在庫合計 FROM 倉庫別商品在庫集計
    WHERE [ a ]
    GROUP BY 商品コード

キーボード:1〜4 で解答 → 次の問題 ← 前の問題

正解と解説を見る

正解:ウ

副問合せ「倉庫番号 'C003' で在庫数が100以上の商品コード」は,問題文の条件から複数行を返します。外側の問合せでは,商品コードがその集合に含まれる行だけを対象にして,商品コードごとに全倉庫の在庫数を合計する必要があります。

  • ア: 商品コード = (SELECT …)
    誤り。「=」による比較では副問合せが1行だけを返す必要があります。該当する商品が複数あるため,エラーになります。

  • イ: 商品コード = ALL (SELECT …)
    誤り。「= ALL」は副問合せの全ての値と等しい場合に真になります。異なる商品コードが複数返されるので,全てと等しい商品コードは存在せず,結果は空になります。

  • ウ: 商品コード IN (SELECT …)
    正しい。INは副問合せが返す複数の値のいずれかと一致すれば真になります。C003の倉庫で在庫数100以上の商品に該当する行を全倉庫分取り出し,GROUP BYで商品コードごとに在庫数を合計できます。

  • エ: EXISTS (SELECT …)
    誤り。この副問合せは外側の行と関連付けられていない(相関がない)ため,該当する行が1行でも存在すれば全ての行で真になります。在庫数が100未満の商品も含めた全商品が集計されてしまいます。


答え

ウ: 商品コード IN (SELECT 商品コード FROM 倉庫別商品在庫集計 WHERE 倉庫番号 = 'C003' AND 在庫数 >= 100)

出典:平成27年度 秋期 応用情報技術者試験 午前 問29

平成27年度秋期の他の問題