今回は、SQLで使う算術演算子について説明します。
SELECTでテーブルのデータを抽出するときや、INSERTで値を挿入するとき、UPDATEで値を更新するときに、それぞれ算術演算子を使うことができます。
この記事では、SQLで使える算術演算子と計算の優先順位、実際の使い方を説明します。
SQLで使う算術演算子
まずは、SQLで使う算術演算子の一覧と計算の優先順位について説明します。
算術演算子の一覧
算術演算子 | 用途 | 説明 |
---|---|---|
+ | 加算 | 値をたし算する |
– | 減算 | 値をひき算する |
* | 乗算 | 値をかけ算する |
/ | 除算 | 値をわり算する |
DIV | 剰余 | わり算結果の整数 |
% | 剰余 | わり算結果の余り |
計算の優先順位
SQL文の算術演算子を用いた計算式では、算数の四則演算と同じ優先順位で計算されます。
- [*],[/],[DIV],[%]・・かけ算、わり算
- [+],[-]・・たし算、ひき算
まずかけ算とわり算が計算され、次にたし算とひき算の順番です。なお、算数の概念と同じく()を使うことで、優先順位を制御することもできます。
①通常の計算
1+2*3=7
②()を使った場合
(1+2)*3=9
算術演算子の使い方
次に、算術演算子を使うときの基本文法の説明と実例を紹介します。
基本文法
–SELECT
SELECT * 列名1,列名2 + 100 FROM テーブル名;
このSQL文で、テーブルから列名1と列名2のそれぞれの値に100を足したデータが抽出されます
–INSERT INTO
INSERT INTO テーブル名(カラム名)
VALUES(100 * 1.10);
このSQL文で、指定したカラムに100に1.10をかけた値が挿入されます
–UPDATE
UPDATE テーブル名
SET カラム名 = カラム名 * 1.10;
このSQL文で、指定したカラムの値が1.10をかけた値に更新されます
実例
算術演算子を使ったSQL文とその結果について、MySQLで実行した画面を紹介します。この実例で使うテーブルは下記の通りです。
id | sta_name | sta_price | stock |
---|---|---|---|
B001 | えんぴつ削り | 1900 | 1 |
B002 | 水性ペン | 150 | 10 |
B003 | ふせん紙 | 250 | 20 |
B004 | カッター | 380 | 5 |
B005 | 消しゴム | 80 | 12 |
B006 | ペンケース | 1000 | 3 |
B007 | はさみ | 680 | 5 |
B008 | テープ糊 | 450 | 7 |
B009 | 電子メモパッド | 1380 | 3 |
B010 | ノート | 180 | 25 |
+(加算)
SELECT sta_name,stock,stock + 1 FROM Stationery;
在庫数(stock)の値に1を足した結果を「stock + 1」のカラムに表示
-(減算)
SELECT sta_name,stock,stock - 1 FROM Stationery;
在庫数(stock)の値から1を引いた結果を「stock – 1」のカラムに表示
*(乗算)
SELECT sta_name,sta_price,stock,sta_price * stock FROM Stationery;
商品価格(sta_price)に在庫数(stock)をかけた結果を「sta_price * stock」のカラムに表示
/(徐算)
商品価格(sta_price)を2で割った結果を「sta_price / 2」のカラムに表示
DIV(わり算の整数部)
商品価格(sta_price)を3で割った結果の整数部のみを「sta_price DIV 3」のカラムに表示
%(わり算の余り)
商品価格(sta_price)を3で割った結果の余りを「sta_price % 3」のカラムに表示
今回の実例では、「stock + 1」や「sta_price % 3」のように、SQL文で記述した計算式がカラム名として表示されていますが、この状態では計算式は分かっても、何を意味するデータ列なのか、客観的に判読し辛くなります。
計算式を使って抽出する列については、AS区を使って列名を分かりやすくしたほうがよいでしょう。
あとがき
今回は、SQLで使う算術演算子の種類と基本文法、実例について記事にしました。
演算子自体は、Excelや他のプログラミング言語と同一のため、特に難しいことではありません。算術演算子は、データベースからの出力結果を様々な状態に加工して活用するための基本知識です。
ぜひ、実際に使って覚えてください。