- Home ›
- MySQLの使い方 ›
- MySQLの基本構文
比較演算子の使い方
比較演算子は値と値が等しいかどうか、大きいかどうかなど値を比較するために使用します。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 は 括弧内のいずれかの値に等しい |
NOT IN | a NOT IN (value,...) | a は 括弧内のいずれの値とも等しくない |
LIKE | a LIKE pat | SQL の単純な正規表現比較を使用したパターンマッチング |
NOT LIKE | a NOT LIKE pat | LIKEの結果を反転させたもの |
ここでは MySQL で利用可能な比較演算子の使い方について解説します。( LIKE 演算子については「パターンマッチングで比較」を参照されてください)。
(Last modified: )
大小の比較
大きさを比較する比較演算子は '<' 、 '<=' 、 '>' 、 '>=' の 4 つが用意されています。それぞれ「小さい」「以下」「大きい」「以上」を判定しています。
select 1 < 3, 3 >= 7, 2 < 2, 2 <= 2;
大小の評価を行い、真の場合は 1 を偽の場合には 0 を返します。
いずれかの値が 1 つでも NULL の場合は結果として NULL を返します。
select 1 < null, 2 > null, null >= null;
カラム名を指定した場合には、カラムに格納されている値に対して比較が行われます。下記では test1 テーブルにある num1 カラムと num2 カラムに格納されている値を比較した結果を取得しています。
select num1, num2, num1 > num2 from test1;
等しいかどうかの比較
等しいかどうかを判定する比較演算子は '=' 、 '<=>' 、 '<>' 、 '!=' の 4 つが用意されています。それぞれ「等しい」「等しい」「等しくない」「等しくない」を判定しています。
select 2 = 2, 2 <=> 3, 2 <> 3, 2 != 2;
等しいかどうかを評価し、真の場合は 1 を偽の場合には 0 を返します。
カラム名を指定した場合には、カラムに格納されている値に対して比較が行われます。下記では test1 テーブルにある num1 カラムと num2 カラムに格納されている値を比較した結果を取得しています。
select num1, num2, num1 = num2, num1 <> num2 from test1;
なお NULL については <=> 演算子以外を使用した場合 NULL 自身を含む何の値と比較しても NULL となります。
select NULL = 2, NULL = NULL, NULL <> NULL, NULL != 3;
NULL が NULL と等しいかどうかを調べるには <=> を使用します。
select NULL <=> 2, NULL <=> NULL;
<=> 演算子では左辺及び右辺に 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;
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;
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;
BETWEEN AND / NOT BETWEEN AND
値が最小値よりも大きいか等しく、かつ最大値よりも小さいか等しいかどうかを比較します。
select 10 between 1 and 19, 25 between 3 and 18;
値を数値だと考えれば、対象の値が最小値以上最大値以下の場合に 1 、そうでない場合に 0 を返します。
数値以外の比較もできます。
select 'd' between 'a' and 'e', 'd' between 'e' and 'p';
NOT BETWEEN AND の場合は、 BETWEEN AND の結果を反転した結果となり 0 なら 1 、 1 なら 0 を返します。
select 10 not between 1 and 19, 25 not between 3 and 18;
カラム名を指定した場合には、カラムに格納されている値に対して比較が行われます。下記では test1 テーブルにある num1 カラムの値が 1 以上 10 以下かどうかの結果を取得しています。
select num1, num1 between 1 and 10 from test1;
IN / NOT IN
値が別途記述した値のリストの中のいずれかに等しいかどうかを判定します。
select 3 in (1, 3, 5, 9, 11), 10 in (1, 3, 5, 9, 11);
値がリストの中のいずれかの値と等しければ 1 を返し、そうでなければ 0 を返します。
数値だけではなく文字列を比較する場合にも使えます。
select 'red' in ('blue', 'white', 'red'), 'green' in ('red', 'white');
NOT IN の場合は、 IN の結果を反転した結果となり 0 なら 1 、 1 なら 0 を返します。
select 'red' not in ('blue', 'white', 'red'), 'green' not in ('red', 'white');
-- --
MySQL で利用可能な比較演算子の使い方について解説しました。
( Written by Tatsuo Ikura )
著者 / TATSUO IKURA
これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。