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

分野:データベース(関係モデル・正規化・SQL・トランザクション/排他制御・障害回復・NoSQL・データベース設計)|実際に出題されたIPA過去問題

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

  1.  商品コード = (SELECT 商品コード FROM 倉庫別商品在庫集計 WHERE 倉庫番号 = 'C003' AND 在庫数 >= 100)
  2.  商品コード = ALL (SELECT 商品コード FROM 倉庫別商品在庫集計 WHERE 倉庫番号 = 'C003' AND 在庫数 >= 100)
  3.  商品コード IN (SELECT 商品コード FROM 倉庫別商品在庫集計 WHERE 倉庫番号 = 'C003' AND 在庫数 >= 100)
  4.  EXISTS (SELECT * FROM 倉庫別商品在庫集計 WHERE 倉庫番号 = 'C003' AND 在庫数 >= 100)
解答・解説を見る

正解:ウ

AI解説

正解はウ。副問合せ「倉庫番号='C003'かつ在庫数>=100の商品コード」は複数行を返す(問題文に該当商品は複数存在とある)。複数行を返す副問合せの結果と比較するには,いずれかの値に一致すればよいIN述語を使う。これにより該当商品コードの全倉庫分の行が選択され,GROUP BYとSUMで商品ごとの在庫合計が求められる。 ア: 「=」は副問合せが1行だけ返す場合にしか使えない。複数行が返るため実行時エラーとなる。 イ: =ALLは「副問合せの全結果と等しい」ことを要求する。異なる商品コードが複数返る場合,全部と同時に等しい値は存在せず,結果が得られない。 ウ: 正しい。INは副問合せが返す値集合のいずれかに一致する行を選ぶ述語で,複数行の結果に対して正しく機能する。 エ: このEXISTSは外側の行と結び付ける相関条件がない非相関副問合せで,該当行が1行でもあれば常に真となり,全商品の行が対象になってしまう。 💡 「副問合せが複数行→ =は不可,INかANY/EXISTS(相関付き)を使う」が鉄則。=ALLは「全部と等しい」なので複数の異なる値が返る時点で不成立,EXISTSは相関条件の有無を必ず確認する。

出典:平成27年度 秋期 応用情報技術者試験 午前 問29 / 独立行政法人情報処理推進機構(IPA)
※Web掲載用に表記を一部変更しています。著作権はIPAに帰属します。
📱 演習アプリで解く(無料・登録不要・2,640問収録)

「データベース」分野の攻略ポイント

関係モデル・正規化・SQL・トランザクション管理・障害回復・データベース設計が中心です。計算問題は少なく、定義と手順を正確に覚えていれば確実に得点できる、いわば「取りこぼしてはいけない」分野です。特に正規形とACID特性は毎年のように形を変えて出ます。

データベースの攻略ポイントをすべて見る(要点5項目・ひっかけ3項目)→

同じ分野(データベース(関係モデル・正規化・SQL・トランザクション/排他制御・障害回復・NoSQL・データベース設計))の過去問