- Home ›
- MySQLの使い方 ›
- MySQLの基本構文 ›
- HERE
比較演算子
比較演算子は値と値が等しいかどうか、大きいかどうかなど値を比較するために使用します。MySQLで利用可能な比較演算子は次の通りです。
演算子 | 使用例 | 意味 |
---|---|---|
= | a = b | a と b は等しい |
<=> | a <=> b | a と b は等しい(NULL対応) |
<> | a <> b | a と b は等しくない |
!= | a != b | a と b は等しくない |
< | a < b | a は b よりも小さい |
<= | a <= b | a は b よりも小さいか等しい |
> | a > b | a は b よりも大きい |
>= | a >= b | a は b よりも大きいか等しい |
比較演算子の結果は1(=TRUE)、0(=FALSE)、またはNULLのいずれかを返します。(TRUEとFALSEは定数でそれぞれ1と0が割り当てられています)。
また下記のような演算子も用意されています。
演算子 | 使用例 | 意味 |
---|---|---|
IS NULL | a IS NULL | a はNULL |
IS NOT NULL | a IS NOT NULL | a はNULLではない |
IS | a IS boolean_value | a はboolean_value |
IS NOT | a IS NOT boolean_value | a はboolean_valueではない |
BETWEEN AND | a BETWEEN min AND max | a は minより大きいか等しくmaxより小さいか等しい |
NOT BETWEEN AND | a NOT BETWEEN min AND max | NOT (a BETWEEN min AND max)のこと |
IN | a IN (value,...) | a は 括弧内のいずれかの値に等しい |
では一つ一つ確認していきます。
大小の比較
大きさを比較する関係演算子は「<」「<=」「>」「>=」の4つが用意されています。それぞれ「小さい」「以下」「大きい」「以上」を判定しています。
mysql> select 1 < 3, 3 >= 7, 2 < 2, 2 <= 2;
大小の評価を行い、真の場合は1を偽の場合には0を返します。
いずれかの値が1つでもNULLの場合は結果としてNULLを返します。
mysql> select 1 < null, 2 > null, null >= null;
等しいかどうかの比較
等しいかどうかを判定する関係演算子は「=」「<=>」「<>」「!=」の2つが用意されています。それぞれ「等しい」「等しい」「等しくない」「等しくない」を判定しています。
mysql> select 2 = 2, 2 = 3, 2 <> 3, 2 != 2;
等しいかどうかを評価し、真の場合は1を偽の場合には0を返します。
なおNULLはNULL自身を含む何の値と比較してもNULLとなります。
mysql> select NULL = 2, NULL = NULL, NULL <> NULL, NULL != 3;
NULLがNULLと等しいかどうかを含めて等しいかどうかを調べるには「=」ではなく「<=>」を使用します。
mysql> select 2 <=> 2, 2 <=> 3, NULL <=> NULL, NULL <=> 3;
「<=>」演算子の場合、左辺及び右辺に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;
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;
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;
BETWEEN AND/NOT BETWEEN AND
値が最小値よりも大きいか等しく、かつ最大値よりも小さいか等しいかどうかを比較します。
mysql> select 10 between 1 and 19, 25 between 3 and 18;
値を数値だと考えれば、対象の値が最小値以上最大値以下の場合に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;
IN/NOT IN
値が別途記述した値のリストの中のいずれかに等しいかどうかを判定します。
mysql> select 3 in (0, 1, 2, 3, 4, 5), 10 in (0, 1, 2, 3, 4, 5);
値がリストの中のいずれかの値と等しければ1を返し、そうでなければ0を返します。
数値だけではなく文字列を比較する場合にも使えます。
mysql> select 'Mon' in ('Sun', 'Mon', 'Tue');
NOT INの場合は、INの結果を反転した結果となり0なら1、1なら0を返します。
mysql> select 'Mon' not in ('Sun', 'Mon', 'Tue');
( Written by Tatsuo Ikura )