平成24年度 春期 午前 問30
データベース
SQLに関する問題
“注文”表と“製品”表に対して,次の SQL 文を実行したときに得られる結果はどれか。
SELECT 製品名, 数量 FROM 注文, 製品
WHERE 注文.製品コード = 製品.製品コード
〔注文〕
| 日付 | 製品コード | 数量 |
|---|---|---|
| 2011-04-10 | P2 | 120 |
| 2011-04-15 | P1 | 100 |
| 2011-04-22 | P4 | 50 |
| 2011-04-30 | P8 | 80 |
| 2011-05-06 | P1 | 100 |
| 2011-05-08 | P3 | 70 |
〔製品〕
| 製品コード | 製品名 |
|---|---|
| P1 | PC |
| P2 | テレビ |
| P3 | 掃除機 |
| P4 | 冷蔵庫 |
| P5 | エアコン |
| P6 | 電話機 |
| P7 | 時計 |
〔選択肢の4つの結果表(いずれも列は 製品名・数量)〕 ア テレビ 120 / PC 100 / 冷蔵庫 50 / 掃除機 70 (4行) イ テレビ 120 / PC 200 / 冷蔵庫 50 / 掃除機 70 (4行) ウ テレビ 120 / PC 100 / 冷蔵庫 50 / PC 100 / 掃除機 70 (5行) エ テレビ 120 / PC 100 / 冷蔵庫 50 / NULL 80 / PC 100 / 掃除機 70 (6行)
- ア(上記アの結果表)
- イ(上記イの結果表)
- ウ(上記ウの結果表)
- エ(上記エの結果表)
答えと解説を見る
✓ これが正解ウ(上記ウの結果表)
解説
両方の表にある製品コードだけが行として残ります。
この SQL 文は二つの表を並べて書いたうえで、注文の側の製品コードと製品の側の製品コードが同じ行どうしを組にする、という条件を付けています。ですから、片方にしか現れない値を持つ行は相手が見つからず、結果から落ちます。注文の側は6行ありますが、そのうち一つは相手の表に同じ値が無いので落ち、残るのは5行です。また、同じ値が2回現れる行は、それぞれが別々に相手と組になるので、まとめられずに2行のまま残ります。取り出す列は製品名と数量の二つだけです。判定の軸は、相手の見つからない行をきちんと落としているかと、同じ値で組になった行をひとまとめにしたり足し合わせたりしていないかの二点です。
ほかの選択肢はなぜ違うのか
- ア(上記アの結果表):組になった行が4行しかありません。同じ値で2回組になるはずのものが1行に減っているので、重なった行をひとまとめにしてしまった結果です。落とすべき行の扱いのほうは合っています。
- イ(上記イの結果表):行数が4行に減っているうえ、減ったぶんの数量が残った行に足し込まれています。組にする操作そのものは数を合計しないので、件数をまとめて集計する操作と取り違えた結果です。
- エ(上記エの結果表):相手の表に同じ値が無い行まで、対応する列を空にしたまま6行として残しています。この文は条件に合う組だけを取り出すので、相手の見つからない行は結果に現れません。
出典:平成24年度 春期 基本情報技術者試験 午前 問30(改変:原典の図表をテキストに書き起こした)
この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)