演算子の優先順位

複数の演算子を組み合わせて使用する場合、どの演算子から評価を行っていくのかで結果は異なってきます。ここでは MySQL における演算子の優先順位がどのように決まるのかについて解説します。

(Last modified: )

演算子の優先順位一覧

次の例を見て下さい。

select 10 + 5 * 4;

10 + 5 * 4 の計算について、 先に 10 + 5 = 15 が計算されると 15 * 4 = 60 という結果になります。そうではなく 先に 5 * 4 = 20 が計算されると 10 + 20 = 30 という結果になります。このようにどの計算から行うのかで結果が異なります。

どちらが正しいのかというと実際の結果から分かるように先に 5 * 4 の結果を行ったあとで 10 + 20 の計算を行うのが正しいです。

演算子の優先順位一覧(1)

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

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

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

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

先ほどの例で出てきた * と + の演算子を見てください。 * の方が + よりも上にあり優先順位が高くなっています。そのため、同じ計算式の中で + と + が使われた場合には先に * を使った計算を行います。

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

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

次の例を見て下さい。

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 がまず最初に計算されます。

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

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

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

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

-- --

MySQL における演算子の優先順位に関する考え方について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。