比較演算子

広告

比較演算子は値と値が等しいかどうか、大きいかどうかなど値を比較するために使用します。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 は 括弧内のいずれかの値に等しい

では一つ一つ確認していきます。

大小の比較

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

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

p7-1

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

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

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

p7-2

等しいかどうかの比較

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

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

p7-3

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

なおNULLはNULL自身を含む何の値と比較してもNULLとなります。

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

p7-4

NULLがNULLと等しいかどうかを含めて等しいかどうかを調べるには「=」ではなく「<=>」を使用します。

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

p7-5

「<=>」演算子の場合、左辺及び右辺にNULLが無い場合は「=」演算子と同じです。そしてNULLをNULLと比較すると1となり、NULLをNULL以外の値と比較すると0となります。

IS NULL/IS NOT NULL

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

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

p7-6

IS/IS NOT

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

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

p7-7

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

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

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

p7-8

BETWEEN AND/NOT BETWEEN AND

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

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

p7-9

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

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

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

p7-10

IN/NOT IN

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

mysql> select 3 in (0, 1, 2, 3, 4, 5), 10 in (0, 1, 2, 3, 4, 5);

p7-11

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

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

mysql> select 'Mon' in ('Sun', 'Mon', 'Tue');

p7-12

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

mysql> select 'Mon' not in ('Sun', 'Mon', 'Tue');

p7-13

( Written by Tatsuo Ikura )