STAGE 02 — 2-4 / SELECTの基本

計算列を作る

考えてみよう

crew テーブルの salary 列には、月給が入っています。もし「年収」を確認したくなったら、電卓を取り出して1件ずつ12倍する必要があるでしょうか?

10人分ならまだしも、何百人分もの年収を電卓で計算するのは大変です。実はSELECT句の中で、SQLに計算までやらせてしまうことができます。

SELECT句の中で計算する

SQLのSELECT句には、列名だけでなく、四則演算の式を書くことができます。試しに、月給から年収を計算してみましょう。

SELECT name, salary, salary * 12 FROM crew;

namesalarysalary * 12
ユミ3200003840000
ケンジ4000004800000
サクラ5200006240000
ハルト4500005400000
レイ3800004560000
ミドリ3600004320000
ソラ4700005640000
トウマ2700003240000
アカリ3500004200000
リョウ4400005280000

salary * 12 という式を書いただけで、SQLがその場で掛け算をして結果を返してくれました。使える演算子は、掛け算の * のほかに、足し算の +、引き算の -、割り算の / があります。テーブルに保存されていない値でも、既存の列をもとにその場で計算して取り出せるのが、この書き方の便利なところです。

文字列の列はそのまま表示される

一方で、namerole のような文字列(文字のデータ)の列は、計算の対象にはなりません。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 DIVERSELECT name, salary * 12 AS 年収 FROM crew; のような文を実際に打ち、計算列の感覚を指に覚えさせておきましょう。次のSTAGE 03では、条件を指定して欲しい行だけに絞り込む WHERE を学びます。

ゆみちゃん
ゆみ

SELECT句は「取り出す」だけじゃなくて「その場で計算する」こともできる——ちょっと欲張りな命令だったね。STAGE 02はこれで完了! 次はいよいよ、欲しい行だけを絞り込む WHERE だよ。