【SQLの基礎知識③】 SQLにおける算術演算子(四則演算)の基本

SQLの基礎知識
SQLの基礎知識
この記事は約9分で読めます。

プログラム言語では、さまざまな計算や処理を行うために四則演算や比較演算の機能を用意しています。SQLは問合せ言語なので、それほど演算が重要なわけではありませんが、検索条件などでは比較を行うことになります。これらの処理のために用いるのが演算子(Operator)です。

演算子には、「算術演算子」、「連結演算子」、「比較演算子」、「論理演算子」などといったものがあります。まず算術演算子から解説していきましょう。

算術演算子は、数値型のデータに対して演算を行うときに用いる演算子です。算術演算子には次のようなものがあります。

  • 加算 +
  • 減算 -
  • 乗算 *
  • 除算 /
  • 剰余 %

算術演算子は左辺と右辺の項の演算を行います。項には列名または数値を指定することができます。書式としては次のようになります。

書式  <列名または数値> <算術演算子> <列名または数値>
それぞれの演算子について解説していきます。ここから先では、実際に表が作られていることを前提に話を進めます。表の作り方についてはこちらを参照してください。また、SELECT文を使って表の操作をしていますが、SELECT文を使った問合せについては、こちらで解説します。
【SQLの基礎知識⑨】 データベース・表の作成と削除
この章では、データベース・表の作成と削除のやり方を習得できます。プライマリキーやデフォルト値の設定方法など実践で役立つ手順を解説しています。いちれべ.comは、オラクル、MS-SQL、MS-Access で使用可能か一目でわかるサイトです。
Recommended Articles

加算演算子

加算演算子(+)は、足し算をするための演算子です。加算演算子を使うと、列の値に数値を加えたり、列同士を足したりすることができます。

ここでは、次の「商品マスタ」を例に考えてみます。

表:商品マスタ
商品番号商品名単価仕入れ値個別包装費数量
1LANケーブル8005605015
2CD-Rメディア2001401020
3マウス200014001006
4ハードディスク1200084006003
5CPU200001400010002
まず、列の値に数値を足す使用例として、「仕入れ値」列の値に「20」を足してみます。

SQL文 SELECT 商品名, 仕入れ値 + 20 FROM 商品マスタ;

実行結果

商品名仕入れ値+20
LANケーブル580
CD-Rメディア160
マウス1420
ハードディスク8420
CPU14020
結果を見ると、「仕入れ値」列の値に「20」を足した値が返されていることがわかります。
なお、問合せ結果の列名が「仕入れ値+20」と、計算の記述がそのまま表示されてしまっています。列名に演算子が入っていて見づらいと思う場合には、別名を指定することで解消することができます。別名についてはこちらを参照してください。
【SQLの基礎知識⑩】 データ問合せの基本
この章では、SQLの基本中の基本と言っていいSELECT文について解説しています。また、重複した値をまとめるDISTINCTについても説明しています。いちれべ.comは、オラクル、MS-SQL、MS-Access で使用可能か一目でわかるサイトです。
また、列同士を足し合わせることもできます。「仕入れ値」列と「個別包装費」列の値を足す場合には次のようにします。

SQL文 SELECT 商品名, 仕入れ値 + 個別包装費 FROM 商品マスタ;

実行結果

商品名仕入れ値+個別包装費
LANケーブル610
CD-Rメディア150
マウス1500
ハードディスク9000
CPU15000
このように、数値型の列と列を加算演算子で接続すれば、簡単に合計を計算することができます。

減算演算子

減算演算子(ー)は、引き算をするための演算子です。減算演算子を使うと問合せ結果に対して、列から数値を引いたり、列同士の引き算をしたりすることができます。

列から数値を引く例題は次のようになります。

SQL文
 SELECT 商品名, 単価 - 15 FROM 商品マスタ;

実行結果

商品名単価 - 15
LANケーブル785
CD-Rメディア185
マウス1985
ハードディスク11985
CPU19985
表:商品マスタ
商品番号商品名単価仕入れ値個別包装費数量
1LANケーブル8005605015
2CD-Rメディア2001401020
3マウス200014001006
4ハードディスク1200084006003
5CPU200001400010002

列同士の引き算の方法は、先ほどの加算と同じ要領になります。

また、「-」は数値の符号を逆転させるのにも使われます。この場合は、符号を逆転させたい列に、「-」を単独で付加します。

SQL文 SELECT 商品名, 個別包装費, - 個別包装費 FROM 商品マスタ;

実行結果

商品名個別包装費-個別包装費
LANケーブル50-50
CD-Rメディア10-10
マウス100-100
ハードディスク600-600
CPU1000-1000

同じ「個別包装費」列をお並べて問合せているのですが、前に「-」を入れると、数値の符号が逆転していることがわかります。

乗算演算子

乗算演算子「*」は、掛け算をするための演算子です。列の値に一定の数値を掛けたり、列の値同士の掛け算に使います。

列の値に一定の数値を掛けるときは次のようになります。

SQL文 SELECT 商品名, 単価 * 1.05 FROM 商品マスタ;

実行結果

商品名単価 * 1.05
LANケーブル840
CD-Rメディア210
マウス2100
ハードディスク12600
CPU21000
表:商品マスタ
商品番号商品名単価仕入れ値個別包装費数量
1LANケーブル8005605015
2CD-Rメディア2001401020
3マウス200014001006
4ハードディスク1200084006003
5CPU200001400010002

ここでは、「単価」列の値に「1.05」を掛けています。列同士の掛け算もできます。「商品マスタ」表の「単価」列と「数量」列を掛ける場合は、次のようになります。

SQL文
 SELECT 商品名, 単価 * 数量 FROM 商品マスタ;

実行結果

商品名単価 * 数量
LANケーブル12000
CD-Rメディア4000
マウス12000
ハードディスク36000
CPU40000

除算演算子

除算演算子(/)は、割り算をするための演算子です。除算演算子を使うと、列の値を一定の数値で割ったり、列同士の割り算ができます。

「商品マスタ表」の「単価」列を「2」で割る場合には、次のように入力します。

SQL文 SELECT 商品名, 単価 / 2 FROM 商品マスタ;

実行結果

商品名単価 / 2
LANケーブル400
CD-Rメディア100
マウス1000
ハードディスク6000
CPU10000
表:商品マスタ
商品番号商品名単価仕入れ値個別包装費数量
1LANケーブル8005605015
2CD-Rメディア2001401020
3マウス200014001006
4ハードディスク1200084006003
5CPU200001400010002

列同士の除算は、先ほどの乗算と同じ要領で行えます。

除算演算子で気を付けるのは、割られる側の列の値や、割る側の数値が「0」であってはならないということです。これは単純に数学の問題ですが、「0」で割ると結果が無限大になってしまうために、コンピュータでは扱えなくなってしまいます。

例として Oracle で割る側に「0」を指定して除算すると、次のようなエラーが発生します。

SQL文 Oracle SELECT 商品名, 単価 / 0 FROM 商品マスタ;
実行結果
 エラー行: 1: エラーが発生しました。
 ORA-01476: 除数がゼロです。

【SQL】 切り捨てと切り下げの違いについての話
切り下げとは?切り捨てとの違いについて解説しています。マイナスの値を切り下げするときには、特に注意が必要で、予期せぬ結果を招くことがあります。SQLサーバーの切り捨てについても解説しています。オラクル、MSアクセスそれぞれ端数処理した結果もわかりやすく解説しています。

剰余演算子

剰余演算子(%)は、割り算の結果の余りを求める演算子です。「商品マスタ」表の「数量」列を「2」で割ったときの余りを計算すると次のようになります。

SQL文 SELECT 商品名, 数量, 数量 % 2 FROM 商品マスタ;

実行結果

商品名数量数量 % 2
LANケーブル151
CD-Rメディア200
マウス60
ハードディスク31
CPU20

「数量」列の値が「20」や「6」といったものは余りがないので「0」が結果となり、「15」や「3」では「1」が余るという結果を出力しています。

なお、ORACLE では%演算子が使えないため、MOD関数を使います。MOD関数については、こちらを参照してください。

https://ichilv.com/sql-mod/

算術演算の優先順位と制御

演算には優先順位があります。この優先順位は通常の数学の計算と同様に、乗算、除算が加算、減算よりも優先されます。加算、減算を乗算、除算よりも先に計算したい場合は、「()」で囲みます。また、剰余演算は、乗算、除算と同じ優先順位です。

優先順位を整理すると次の順番になります。

  1. ( )で囲んだ演算
  2. 乗算、除算、剰余
  3. 加算、減算

「商品マスタ」表で、「仕入れ値」列と「個別包装費」列の値を足した結果に、「数量」列の値を掛けたい場合には、次のように入力します。

SQL文
SELECT 商品名, (仕入れ値 + 個別包装費) * 数量 FROM 商品マスタ;

実行結果

商品名( 仕入れ値 + 個別包装費 ) * 数量
LANケーブル9150
CD-Rメディア3000
マウス9000
ハードディスク27000
CPU30000

関連リンク

次の章に進む
【SQLの基礎知識④】 SQLにおける連結演算子の基本
この章では、SQLで文字列を連結するテクニックを習得できます。いちれべ.comは、オラクル、MS-SQL、MS-Access で使用可能か一目でわかるサイトです。
目次
【SQLの基礎知識】基本ルールや基礎の基礎をマスターしよう
こちらの記事を読み進めることで、SQLの基礎が充分に身に付きます。これからSQLを身に着けたい初心者・入門者の方に最適です。データベース製品ごとに表現方法が異なることがありますので、ある程度SQLのスキルがある方も利用できるサイトです。

Recommended Articles