過去問解きまくり研究所 ホーム

平成27年度 秋期 午前 問29

データベース

SQL文のaに入る適切な字句

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

〔関係スキーマ〕(原典は主キーに実線の下線。ここでは主キーに * を付けて写した)

倉庫別商品在庫集計(倉庫番号*,商品コード*,在庫数)

〔SQL 文〕

SELECT 商品コード, SUM(在庫数) AS 在庫合計 FROM 倉庫別商品在庫集計
       WHERE  a
       GROUP BY 商品コード
答えと解説を見る

✓ これが正解ウ商品コード IN (SELECT 商品コード FROM 倉庫別商品在庫集計 WHERE 倉庫番号 = 'C003' AND 在庫数 >= 100)

解説

複数行が返るので、IN で受け取ります。

設問は、ある倉庫で在庫数が 100 以上だった商品について、全ての倉庫の在庫数を合計する SQL 文の空欄を選ばせています。答えを決めているのは、該当する商品は複数存在するという但し書きです。内側の問合せが返す商品コードが一つとは限らず、複数の行になるからです。内側の問合せを条件に使うときは、返ってくる行数に合う演算子を選ぶ必要があります。IN は、返ってきた複数の値のいずれかと一致するかどうかを判定するので、複数行をそのまま受け取れます。この条件で絞ると、まず倉庫番号が C003 で在庫数が 100 以上の商品コードの一覧ができ、外側ではその一覧に含まれる商品の行だけが、倉庫を問わず集められます。集めた行を商品コードごとに GROUP BY でまとめて在庫数を合計するので、設問の求める集計になります。副問合せの書き分けは、何行返るかを先に数えるところから始めます。

ほかの選択肢はなぜ違うのか

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

この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)