応用情報技術者 2015年 秋期 午前2 問29
問題文
“倉庫別商品在庫集計” 表から在庫数の合計を求めたい。倉庫番号 'C003' の倉庫で在庫数が 100 以上の商品に対して、全ての倉庫における在庫数の合計を求める SQL文の aに入る適切な字句はどれか。ここで、該当する商品は複数存在するとともに在庫数が 100 未満の商品も存在するものとする。また、実線の下線は主キーを表す。
倉庫別商品在庫集計 (倉庫番号、商品コード、在庫数)
〔SQL文〕
SELECT 商品コード、SUM(在庫数) AS 在庫合計 FROM 倉庫別商品在庫集計
WHERE [ a ]
GROUP BY 商品コード
選択肢
ア:
商品コード = (SELECT 商品コード FROM 倉庫別商品在庫集計
WHERE 倉庫番号= 'C003' AND 在庫数 >= 100 )
イ:
商品コード = ALL(SELECT 商品コード FROM 倉庫別商品在庫集計
WHERE 倉庫番号 = 'C003' AND 在庫数 >= 100)
ウ:
商品コード IN (SELECT 商品コード FROM 倉庫別商品在庫集計
WHERE 倉庫番号 = 'C003' AND 在庫数 >= 100 )
(正解)エ:
EXISTS (SELECT * FROM 倉庫別商品在庫集計
WHERE 倉庫番号= 'C003' AND 在庫数 >= 100)
倉庫別商品在庫集計の在庫数合計を求めるSQL文【午前2 解説】
要点まとめ
- 結論:複数の商品コードを対象にする場合は「IN句」を使い、該当商品の全在庫合計を正しく集計できる。
- 根拠:「=」は単一値比較、「ALL」は全ての値と比較、「EXISTS」は存在確認で条件指定に不向き。
- 差がつくポイント:複数行を返すサブクエリの扱いと、SQLの集合演算子の意味を正確に理解すること。
正解の理由
選択肢ウの「商品コード IN (SELECT 商品コード FROM 倉庫別商品在庫集計 WHERE 倉庫番号 = 'C003' AND 在庫数 >= 100)」は、倉庫番号'C003'で在庫数が100以上の複数の商品コードを抽出し、その商品コードに該当する全倉庫の在庫数を合計する条件として適切です。IN句は複数の値を対象にできるため、複数の商品コードを正しくフィルタリングできます。
よくある誤解
「=」は単一の値と比較するため、複数の商品コードがある場合はエラーや意図しない結果になることがあります。EXISTSは条件の真偽判定に使い、特定の値の絞り込みには不適切です。
解法ステップ
- 問題文から「倉庫番号'C003'で在庫数100以上の商品コード」を抽出する必要があると理解する。
- その商品コードは複数存在する可能性があるため、単一値比較の「=」は不適切と判断。
- 複数の値を対象にできる「IN句」を使うことを検討。
- 「ALL」は全ての値と比較するため、条件としては不適切。
- 「EXISTS」は存在確認であり、商品コードの絞り込みには使えない。
- 以上より「IN句」を使った選択肢ウが正解と判断。
選択肢別の誤答解説
- ア: 「=」は単一値比較。複数の商品コードがある場合、エラーや不正確な結果になる。
- イ: 「= ALL」は全ての値と比較するため、条件が厳しすぎて該当しない可能性が高い。
- ウ: 複数の商品コードを正しく抽出し、全倉庫の在庫合計を求める条件として適切。
- エ: 「EXISTS」はサブクエリの存在確認であり、商品コードの絞り込みには使えないため不適切。
補足コラム
SQLのサブクエリで複数行を返す場合、比較演算子「=」は使えません。複数の値を対象にする場合は「IN句」を使うのが基本です。また、「ALL」は全ての値に対して条件を満たすかを判定するため、複数行の比較には向きません。EXISTSはサブクエリの結果が存在するかどうかを判定するため、条件式としては使えますが、特定の値の絞り込みには適しません。
FAQ
Q: なぜ「=」ではなく「IN」を使うのですか?
A: 「=」は単一の値と比較するため、複数の値を返すサブクエリには使えずエラーになります。複数値の比較には「IN」が適切です。
A: 「=」は単一の値と比較するため、複数の値を返すサブクエリには使えずエラーになります。複数値の比較には「IN」が適切です。
Q: 「ALL」はどんな場合に使いますか?
A: 「ALL」は全ての値に対して条件を満たすかを判定する際に使いますが、複数値の絞り込みには向きません。
A: 「ALL」は全ての値に対して条件を満たすかを判定する際に使いますが、複数値の絞り込みには向きません。
Q: 「EXISTS」はどういう時に使うべきですか?
A: 「EXISTS」はサブクエリの結果が存在するかどうかを判定するため、条件の有無を確認したい時に使います。
A: 「EXISTS」はサブクエリの結果が存在するかどうかを判定するため、条件の有無を確認したい時に使います。
関連キーワード: SQL, サブクエリ、IN句、集合演算子、在庫管理、データベース

\ せっかくなら /
応用情報技術者を
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

