SQLで使える演算子のひとつに四則演算を扱う算術演算子があります。

演算子説明
+加算
減算
*乗算
/除算

算術演算子を使用して、数値データや日付データの式を作成します。まずはサンプルを見てみましょう。

SELECT name, salary, salary + 100000
  FROM Employees;
実行結果
    name    | salary | ?column?
------------+--------+----------
 山田太郎   | 500000 |   600000
 佐藤達弘   | 300000 |   400000
 木村幸平   | 250000 |   350000
 神埼恵美   | 220000 |   320000
 高木龍之介 | 210000 |   310000
 青木和也   | 210000 |   310000
(6 行)

上記例では、加算演算子を使用して、全社員の給与額を10万円増加させ、3列目に表示しています。ただ、列名が「?column?」になっており、このままではわかりにくいです。

このような場合に、別名を付けると見やすくなります。

SELECT name AS "社員名", salary AS "給与額", salary + 100000 AS "給与額+ボーナス"
  FROM Employees;
実行結果
   社員名   | 給与額 | 給与額+ボーナス
------------+--------+------------------
 山田太郎   | 500000 |            600000
 佐藤達弘   | 300000 |            400000
 木村幸平   | 250000 |            350000
 神埼恵美   | 220000 |            320000
 高木龍之介 | 210000 |            310000
 青木和也   | 210000 |            310000
(6 行)

列に別名を付ける場合は、ASキーワードを使用し、ダブルクォーテーション(“)で囲みます。シングルクォーテーション(‘)ではないことに注意しましょう。

演算子の優先順位

算術式に複数の演算子が含まれる場合には、最初に乗算・除算が評価され、加算・減算より優先されます。式の中の演算子が同じ優先順位である場合には、左側から右側で評価が行われます。

SELECT name AS "社員名", salary AS "給与額", 12 * salary + 100000 AS "年俸+ボーナス"
  FROM Employees;
実行結果
   社員名   | 給与額 | 年俸+ボーナス
------------+--------+----------------
 山田太郎   | 500000 |        6100000
 佐藤達弘   | 300000 |        3700000
 木村幸平   | 250000 |        3100000
 神埼恵美   | 220000 |        2740000
 高木龍之介 | 210000 |        2620000
 青木和也   | 210000 |        2620000
(6 行)

カッコを使用して、カッコの中の式を最初に評価できるように変更できます。式の評価順を見やすく明確にする目的においてもカッコは使えます。

SELECT name AS "社員名", salary AS "給与額", 12 * (salary + 8000) AS "年俸+交通費"
  FROM Employees;
実行結果
   社員名   | 給与額 | 年俸+交通費
------------+--------+--------------
 山田太郎   | 500000 |      6096000
 佐藤達弘   | 300000 |      3696000
 木村幸平   | 250000 |      3096000
 神埼恵美   | 220000 |      2736000
 高木龍之介 | 210000 |      2616000
 青木和也   | 210000 |      2616000
(6 行)

上記例では、毎月の給与額に交通費8000円を加算して、12で乗算しています。カッコがあるため、加算が乗算より先に計算されます。

NULLを含む演算

SQL文の中で演算を行う場合には、「NULLを含む演算」に注意しなければなりません。NULLを含んだ計算は必ずNULLになります。例えば以下の式があったとします。

 10 + NULL
 NULL – 1
 1 * NULL
 NULL / 10
 NULL / 0

これらすべて結果はNULLになります。NULLを0で割る場合も適用されます。通常、10 / 0のように0で割ろうとするとエラーとなりますが、NULLを0で割る場合だけはエラーにならずNULLになります。