比較演算子の使い方

比較演算子は値と値が等しいかどうか、大きいかどうかなど値を比較するために使用します。MySQLで利用可能な比較演算子は次の通りです。

演算子使用例意味
=a = ba と b は等しい
<=>a <=> ba と b は等しい(NULL対応)
<>a <> ba と b は等しくない
!=a != ba と b は等しくない
<a < ba は b よりも小さい
<=a <= ba は b よりも小さいか等しい
>a > ba は b よりも大きい
>=a >= ba は b よりも大きいか等しい

比較演算子の結果は 1(=TRUE) 、 0(=FALSE) 、または NULL のいずれかを返します。( TRUE と FALSE は定数でそれぞれ 1 と 0 が割り当てられています)。

また下記のような演算子も用意されています。

演算子使用例意味
IS NULLa IS NULLa はNULL
IS NOT NULLa IS NOT NULLa はNULLではない
ISa IS boolean_valuea はboolean_value
IS NOTa IS NOT boolean_valuea はboolean_valueではない
BETWEEN ANDa BETWEEN min AND maxa は minより大きいか等しくmaxより小さいか等しい
NOT BETWEEN ANDa NOT BETWEEN min AND maxNOT (a BETWEEN min AND max)のこと
INa IN (value,...)a は 括弧内のいずれかの値に等しい
NOT INa NOT IN (value,...)a は 括弧内のいずれの値とも等しくない
LIKEa LIKE patSQL の単純な正規表現比較を使用したパターンマッチング
NOT LIKEa NOT LIKE patLIKEの結果を反転させたもの

ここでは MySQL で利用可能な比較演算子の使い方について解説します。( LIKE 演算子については「パターンマッチングで比較」を参照されてください)。

(Last modified: )

大小の比較

大きさを比較する比較演算子は '<' 、 '<=' 、 '>' 、 '>=' の 4 つが用意されています。それぞれ「小さい」「以下」「大きい」「以上」を判定しています。

select 1 < 3, 3 >= 7, 2 < 2, 2 <= 2;

大小の比較(1)

大小の評価を行い、真の場合は 1 を偽の場合には 0 を返します。

いずれかの値が 1 つでも NULL の場合は結果として NULL を返します。

select 1 < null, 2 > null, null >= null;

大小の比較(2)

カラム名を指定した場合には、カラムに格納されている値に対して比較が行われます。下記では test1 テーブルにある num1 カラムと num2 カラムに格納されている値を比較した結果を取得しています。

select num1, num2, num1 > num2 from test1;

大小の比較(3)

等しいかどうかの比較

等しいかどうかを判定する比較演算子は '=' 、 '<=>' 、 '<>' 、 '!=' の 4 つが用意されています。それぞれ「等しい」「等しい」「等しくない」「等しくない」を判定しています。

select 2 = 2, 2 <=> 3, 2 <> 3, 2 != 2;

等しいかどうかの比較(1)

等しいかどうかを評価し、真の場合は 1 を偽の場合には 0 を返します。

カラム名を指定した場合には、カラムに格納されている値に対して比較が行われます。下記では test1 テーブルにある num1 カラムと num2 カラムに格納されている値を比較した結果を取得しています。

select num1, num2, num1 = num2, num1 <> num2 from test1;

等しいかどうかの比較(2)

なお NULL については <=> 演算子以外を使用した場合 NULL 自身を含む何の値と比較しても NULL となります。

select NULL = 2, NULL = NULL, NULL <> NULL, NULL != 3;

等しいかどうかの比較(3)

NULL が NULL と等しいかどうかを調べるには <=> を使用します。

select NULL <=> 2, NULL <=> NULL;

等しいかどうかの比較(4)

<=> 演算子では左辺及び右辺に NULL が無い場合は = 演算子と同じです。そして NULL を NULL と比較すると 1 となり、 NULL を NULL 以外の値と比較すると 0 となります。また NULL の比較には次の IS NULL も参照されてください。

IS NULL / IS NOT NULL

値が NULL かどうかを判定します。 IS NULL では対象の値が NULL なら 1 を返します。 IS NOT NULL では対象の値が NULL 以外なら 1 を返します。

select 1 is null, null is null, 3 is not null, null is not null;

IS NULL / IS NOT NULL(1)

NULL と等しいかどうかの判定には演算子 <=> も使用できます。

IS / IS NOT

値を boolean 型の値と比較します。 boolean 型の値は TRUE 、 FALSE 、 UNKNOWN の3つです。

select 1 is TRUE, 2 is TRUE, 0 is TRUE, 0 is not TRUE, 0 is FALSE;

IS / IS NOT(1)

0 以外の値を TRUE と比較すると IS の場合は 1 を返し、 IS NOT の場合は 0 を返します。また 0 を FALSE と比較すると IS の場合は 1 を返し、 IS NOT の場合は 0 を返します。

また NULL は UNKNOWN と比較した場合に IS の場合は 1 を返し、 IS NOT の場合は 0 を返します。

select NULL is TRUE, NULL is FALSE, NULL is UNKNOWN;

IS / IS NOT(2)

BETWEEN AND / NOT BETWEEN AND

値が最小値よりも大きいか等しく、かつ最大値よりも小さいか等しいかどうかを比較します。

select 10 between 1 and 19, 25 between 3 and 18;

BETWEEN AND / NOT BETWEEN AND(1)

値を数値だと考えれば、対象の値が最小値以上最大値以下の場合に 1 、そうでない場合に 0 を返します。

数値以外の比較もできます。

select 'd' between 'a' and 'e', 'd' between 'e' and 'p';

BETWEEN AND / NOT BETWEEN AND(2)

NOT BETWEEN AND の場合は、 BETWEEN AND の結果を反転した結果となり 0 なら 1 、 1 なら 0 を返します。

select 10 not between 1 and 19, 25 not between 3 and 18;

BETWEEN AND / NOT BETWEEN AND(3)

カラム名を指定した場合には、カラムに格納されている値に対して比較が行われます。下記では test1 テーブルにある num1 カラムの値が 1 以上 10 以下かどうかの結果を取得しています。

select num1, num1 between 1 and 10 from test1;

BETWEEN AND / NOT BETWEEN AND(4)

IN / NOT IN

値が別途記述した値のリストの中のいずれかに等しいかどうかを判定します。

select 3 in (1, 3, 5, 9, 11), 10 in (1, 3, 5, 9, 11);

IN / NOT IN(1)

値がリストの中のいずれかの値と等しければ 1 を返し、そうでなければ 0 を返します。

数値だけではなく文字列を比較する場合にも使えます。

select 'red' in ('blue', 'white', 'red'), 'green' in ('red', 'white');

IN / NOT IN(2)

NOT IN の場合は、 IN の結果を反転した結果となり 0 なら 1 、 1 なら 0 を返します。

select 'red' not in ('blue', 'white', 'red'), 'green' not in ('red', 'white');

IN / NOT IN(3)

-- --

MySQL で利用可能な比較演算子の使い方について解説しました。

( Written by Tatsuo Ikura )

プロフィール画像

著者 / TATSUO IKURA

これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。