演算子の優先順位

広告

様々な演算子を組み合わせて使用する場合、どの演算子から評価を行っていくのかで結果は異なってきます。

次の例を見て下さい。

SELECT 10 + 5 * 4;

この場合、先に「10 + 5」が演算されると次に「15 * 4」を演算され全体として60になります。逆に「5 * 4」が先に演算されると次に「10 + 20」が演算され全体として30になります。

演算子には優先順位が定められています。複数の演算子を組み合わせている場合にはより優先順位の高い演算子から演算されることになっています。

演算子の優先順位は次の通りです。

優先順位 高い
------------------------------------------------
!
-(符号のマイナス)  ~
^
*  /  DIV  %  MOD
-  +
<<  >>
&
|
=  <=>  >=  >  <=  <  <>  !=  IS  IN
BETWEEN
NOT
&&  AND
||  OR  XOR
:=
------------------------------------------------
優先順位 低い

上に書かれているほど優先順位が高く、下になるほど優先順位は低くなります。同じ行に書かれている演算子は優先順位に違いはありません。

例として「*」と「+」を見てください。「*」の方が「+」よりも上に書かれていますので「*」の方が優先順位が高くなっています。その為、同じ式の中で「*」と「+」の2つの演算子があった場合にはまず先に「*」を使った演算が行われます。

よって最初の例では「5 * 4」が先に実行され、その後で「10 + 20」が実行されます。

mysql> select 10 + 5 * 4;

p10-1

括弧を使った優先順位の変更

複数の演算子が含まれていた場合は演算子の優先順位に従って演算されます。ただ優先順位に関わらず先に演算を行いたい場合もありますが、その場合は優先したい演算を括弧で括って下さい。

次の例を見て下さい。

SELECT 10 + 5 * 4;

「+」と「*」では優先順位が「*」の方が高いため先に「5 * 4」が演算されることになりますが、括弧を使うことで優先順位を変えることができます。

SELECT (10 + 5) * 4;

括弧で囲まれた中の演算は、優先順位に関係なく優先的に行われます。よって先に「10 + 5」が演算され、次に「15 * 4」が演算されることになります。

括弧の中に複数の演算子が含まれていた場合には、括弧の中だけで演算子の優先順位によって演算される順番が決まります。

SELECT (10 + 8 / 2) * 4;

上記の場合はまず括弧の中の「10 + 8 / 2」が演算されますが、この中には「+」と「/」の二つの演算子が含まれているため優先順位から先に「8 / 2」が演算されます。

また括弧の中にさらに括弧を記述することもできます。

SELECT ((10 + 8) / 2) * 4;

括弧の中に括弧がある場合でも考え方は同じです。外側の括弧の中にある「(10 + 8) / 2」が演算されますが、この式には括弧が含まれているため括弧の中の「10 + 8」がまず最初に演算されます。

では実際に試してみます。

mysql> select 10 + 8 / 2 * 4, (10 + 8 / 2) * 4, ((10 + 8) / 2) * 4;

p10-2

括弧を使うことで演算の順序が変わっていることが確認できます。

( Written by Tatsuo Ikura )