平成22年度 春期 午前 問33
データベース
SQL文
表 A から実行結果 B を得るための SQL 文はどれか。
〔A〕
社員コード │ 名前 │ 部署コード │ 給料 ───────────┼──────────┼────────────┼───────── 10010 │ 伊藤幸子 │ 101 │ 200,000 10020 │ 斉藤栄一 │ 201 │ 300,000 10030 │ 鈴木裕一 │ 101 │ 250,000 10040 │ 本田一弘 │ 102 │ 350,000 10050 │ 山田五郎 │ 102 │ 300,000 10060 │ 若山まり │ 201 │ 250,000
〔実行結果 B〕
部署コード │ 社員コード │ 名前 ───────────┼────────────┼────────── 101 │ 10010 │ 伊藤幸子 101 │ 10030 │ 鈴木裕一 102 │ 10040 │ 本田一弘 102 │ 10050 │ 山田五郎 201 │ 10020 │ 斉藤栄一 201 │ 10060 │ 若山まり
- アSELECT 部署コード,社員コード,名前 FROM A GROUP BY 社員コード
- イSELECT 部署コード,社員コード,名前 FROM A GROUP BY 部署コード
- ウSELECT 部署コード,社員コード,名前 FROM A ORDER BY 社員コード,部署コード
- エSELECT 部署コード,社員コード,名前 FROM A ORDER BY 部署コード,社員コード
答えと解説を見る
✓ これが正解エSELECT 部署コード,社員コード,名前 FROM A ORDER BY 部署コード,社員コード
解説
並べ替えのキーは部署コードが先、社員コードが後です。
結果の表と元の表を見比べるときは、行数、列の並び、行の並びの順に当てると速く済みます。まず行数です。元の表は 6 行で、実行結果も 6 行あり、社員が一人ずつそのまま残っています。部署コードでまとめる集約が働いていれば行数は 3 行に減るはずなので、ここで部署コードで集約する SQL 文は候補から外れます。次に列の並びですが、四つの文はいずれも同じ順に列を選んでいるので差が付きません。残るのは行の並びだけです。結果を上から見ると部署コードが 101、101、102、102、201、201 と小さい順に並び、同じ部署の中では社員コードが小さい順に並んでいます。つまり最初に部署コードで並べ、それが同じときだけ社員コードで並べたことになります。並べ替えのキーは左に書いたものが優先されるので、部署コード、社員コードの順に指定した文が正解です。
ほかの選択肢はなぜ違うのか
- アSELECT 部署コード,社員コード,名…:同じ値の行をまとめる指定です。社員コードは全員が違うため行数こそ 6 のままですが、まとめる基準にも計算結果にもなっていない列をそのまま並べることはできず、並び順も定まりません。
- イSELECT 部署コード,社員コード,名…:部署コードでまとめると、101 と 102 と 201 の 3 行に縮みます。実行結果は 6 行のまま一人ずつ残っているので、この指定では行数の時点で合いません。
- ウSELECT 部署コード,社員コード,名…:左に置いた社員コードが優先されるので、10010 から 10060 まで番号順に並びます。そのとき部署コードは 101、201、101、102、102、201 とばらつき、実行結果の並びと一致しません。
出典:平成22年度 春期 応用情報技術者試験 午前 問33
この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)