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になります。