crew テーブルの salary 列には、月給が入っています。もし「年収」を確認したくなったら、電卓を取り出して1件ずつ12倍する必要があるでしょうか?
10人分ならまだしも、何百人分もの年収を電卓で計算するのは大変です。実はSELECT句の中で、SQLに計算までやらせてしまうことができます。
SELECT句の中で計算する
SQLのSELECT句には、列名だけでなく、四則演算の式を書くことができます。試しに、月給から年収を計算してみましょう。
SELECT name, salary, salary * 12 FROM crew;
| name | salary | salary * 12 |
|---|---|---|
| ユミ | 320000 | 3840000 |
| ケンジ | 400000 | 4800000 |
| サクラ | 520000 | 6240000 |
| ハルト | 450000 | 5400000 |
| レイ | 380000 | 4560000 |
| ミドリ | 360000 | 4320000 |
| ソラ | 470000 | 5640000 |
| トウマ | 270000 | 3240000 |
| アカリ | 350000 | 4200000 |
| リョウ | 440000 | 5280000 |
salary * 12 という式を書いただけで、SQLがその場で掛け算をして結果を返してくれました。使える演算子は、掛け算の * のほかに、足し算の +、引き算の -、割り算の / があります。テーブルに保存されていない値でも、既存の列をもとにその場で計算して取り出せるのが、この書き方の便利なところです。
文字列の列はそのまま表示される
一方で、name や role のような文字列(文字のデータ)の列は、計算の対象にはなりません。SELECT句にそのまま書けば、値がそのまま表示されるだけです。
SELECT name, role FROM crew;
これは以前学んだ通り、値をそのまま取り出しているだけで、計算は行われていません。salary * 12 のような計算ができるのは、数字が入っている列に対してだけ、という点を覚えておきましょう。文字列の列同士を * や / でつなごうとしても、意味のある結果にはなりません。
計算結果にもASで名前をつける
salary * 12 のような計算式には、そのままだと salary * 12 という読みにくい見出しがついてしまいます。ここで前回学んだ AS の出番です。
SELECT name, salary * 12 AS 年収 FROM crew;
| name | 年収 |
|---|---|
| ユミ | 3840000 |
| ケンジ | 4800000 |
| サクラ | 6240000 |
| ハルト | 5400000 |
| レイ | 4560000 |
| ミドリ | 4320000 |
| ソラ | 5640000 |
| トウマ | 3240000 |
| アカリ | 4200000 |
| リョウ | 5280000 |
見出しが「年収」という分かりやすい日本語になりました。計算列は、ASと組み合わせてはじめて、結果として読みやすいものになります。計算式を書いたら、セットでASをつける——これを習慣にしておくとよいでしょう。
SELECT name, salary * 12 AS 年収 FROM crew; というSQL文は、どんな結果を返すでしょう?
答えを見る
乗組員の名前(name)と、給与(salary)を12倍した値を「年収」という見出しで表示します。salary * 12 がその場で行われる掛け算、AS 年収 がその計算結果につけた見出しです。
STAGE 02では、SELECT・列の選択・DISTINCT・AS・計算列と、SELECT文の基本をひと通り学びました。SQL DIVERで SELECT name, salary * 12 AS 年収 FROM crew; のような文を実際に打ち、計算列の感覚を指に覚えさせておきましょう。次のSTAGE 03では、条件を指定して欲しい行だけに絞り込む WHERE を学びます。
SELECT句は「取り出す」だけじゃなくて「その場で計算する」こともできる——ちょっと欲張りな命令だったね。STAGE 02はこれで完了! 次はいよいよ、欲しい行だけを絞り込む WHERE だよ。