初級シスアドSQL過去問題解説

解答:オ

まず、3科目の平均の点数が65点以上の生徒の名前を求めるSQL文であるから、SELECT句は名前が指定されていなければならない。解答群のアとイはSELECT句が番号になっている。したがって、解答群のアとイは解答から除外できる。

つぎに、3科目の平均が65点以上ということだ。3科目の平均65点以上ということは、以下の式で抽出できる。

3科目の合計 ÷ 3 >= 65

この式は、左辺と右辺を3倍しても同じである。したがって、この条件式は以下の式に変換できる。

科目の合計 >= 195

これに気づくことがポイントである。考え方は、195とはどういう意味の数値だろうと考えることである。

ウ、エとオそれぞれのWHERE句を見てみよう。なお、実行結果は分かりやすいようにすべての列、合計と平均を表示させている。

ウ WHERE 英語 >= 65 OR 国語 >= 65 OR 数学 >= 65

実行結果を見れば分かるように3科目のいずれかが65点以上であれば抽出される。例えば、英語が65点、国語と数学が0点でも抽出される。このようにデータに極端なデータを設定することで実行結果が正しいかどうかが分かることがある。これはSQL以外でも使えるので覚えて欲しいテクニックである。

実行結果
番号名前英語国語数学合計平均
3011佐藤56706018662.0
3023鈴木70658021571.6
3047田中80705020066.7
3066中村70807522575.0

エ WHERE 英語 + 国語 + 数学 > 195

スポンサードリンク

英語、国語と数学の合計点が195より大きい生徒の名前が抽出される。実行結果を見ると、正解のように思える。しかし、問題文にもあるように平均点が65点以上の生徒の名前を抽出しなければならない。

例えば、英語が65点、数学が65点、国語が65点のときは、平均点は65点である。また、それぞれを合計すると、195点である。この場合は抽出されなければならない。しかし、195点より大きくなければ抽出されないので、この場合は抽出されない。したがって誤りである。

条件式を確認するときは、抽出条件で指定された値が抽出されるかどうかを確認すると間違いを防ぐことができる。この場合は、3科目の合計点が195点のときに抽出されるかどうかを確認すればよい。

実行結果
番号名前英語国語数学合計平均
3023鈴木70658021571.5
3047田中80705020066.7
3066中村70807522575.0

オ WHERE 英語 + 国語 + 数学 >= 195

実行結果
番号名前英語国語数学合計平均
3023鈴木70658021571.5
3047田中80705020066.7
3066中村70807522575.0

英語、国語と数学の合計点が195点以上の生徒の名前が抽出される。

関連ページ
SQL講座WHERE句で特定の行を抽出する
SQL講座WHERE句において複合条件で行を抽出する