【MySQL】比較演算 - 値の比較と演算子
MySQLは値の関係性について真偽を判定できます。
ここでは、その処理である比較演算を解説します。
検証環境
比較演算
比較演算は“値の関係性の真偽を判定する演算”です。
演算結果として、関係性が正しい場合はTRUE
(1
)、正しくない場合はFALSE
(0
)を算出します。
例えば、“3と8は等しい”という関係性について、3と8は等しくないため、FALSE
になります。
比較演算子
比較演算子は比較演算の種類を表す記号です。
次の表のように比較演算は様々な種類があり、各比較演算に対応した演算子があります。
演算 | 演算子 | 構文 |
---|---|---|
AとBは『等しい』 | = , <=> |
A = B , A <=> B |
AとBは『等しくない』 | <> , != |
A <> B , A != B |
AはB『よりも小さい』 | < |
A < B |
AはB『以下』 | <= |
A <= B |
AはB『よりも大きい』 | > |
A > B |
AはB『以上』 | >= |
A >= B |
Aは『NULLである』 | IS NULL |
A IS NULL |
Aは『NULLではない』 | IS NOT NULL |
A IS NOT NULL |
Aは『TRUE/FALSEである』 | IS |
A IS TRUE , A IS FALSE |
Aは『TRUE/FALSEではない』 | IS NOT |
A IS NOT TRUE , A IS NOT FALSE |
Aは『value1以上、value2以下の値である』 | BETWEEN AND |
A BETWEEN value1 AND value2 |
Aは『value1以上、value2以下の値ではない』 | NOT BETWEEN AND |
A NOT BETWEEN value1 AND value2 |
Aは『いずれかの値に等しい』 | IN |
A IN (value, value...) |
Aは『いずれの値とも等しくない』 | NOT IN |
A NOT IN (value, value...) |
Aは『パターンにマッチする』 | LINKE |
A LINKE pattern |
Aは『パターンにマッチしない』 | NOT LIKE |
A NOT LIKE pattern |
また、演算結果は1
(TRUE)または0
(FALSE)になります。
等しい(=
, <=>
)
2値の関係性が『等しい』の演算は=
演算子を使います。
mysql> SELECT 8 = 8 , 0 = 0, 3 = 8;
+-------+-------+-------+
| 8 = 8 | 0 = 0 | 3 = 8 |
+-------+-------+-------+
| 1 | 1 | 0 |
+-------+-------+-------+
1 row in set (0.00 sec)
また、値のNULL
について、=
演算子は対応していません。
mysql> SELECT NULL = NULL, 8 = NULL;
+-------------+----------+
| NULL = NULL | 8 = NULL |
+-------------+----------+
| NULL | NULL |
+-------------+----------+
1 row in set (0.00 sec)
この結果から分かるように=
演算子でNULLを使うと、期待する演算になりません。(結果がNULLになる)
NULL
を含む場合は<=>
演算子を使用します。
mysql> SELECT NULL <=> NULL, 8 <=> NULL, 8 <=> 8, 3 <=> 8;
+---------------+------------+---------+---------+
| NULL <=> NULL | 8 <=> NULL | 8 <=> 8 | 3 <=> 8 |
+---------------+------------+---------+---------+
| 1 | 0 | 1 | 0 |
+---------------+------------+---------+---------+
1 row in set (0.00 sec)
等しくない(<>
, !=
)
2値の関係性が『等しくない』の演算は<>
演算子を使います。
mysql> SELECT 8 <> 3, 8 <> 8;
+--------+--------+
| 8 <> 3 | 8 <> 8 |
+--------+--------+
| 1 | 0 |
+--------+--------+
1 row in set (0.00 sec)
また、!=
演算子でも同様の演算を行えます。
mysql> SELECT 8 != 3, 8 != 8;
+--------+--------+
| 8 != 3 | 8 != 8 |
+--------+--------+
| 1 | 0 |
+--------+--------+
1 row in set (0.00 sec)
よりも小さい(<
)
2値の関係性が『よりも小さい』の演算は<
演算子を使います。
mysql> SELECT 3 < 8, 8 < 3, 8 < 8;
+-------+-------+-------+
| 3 < 8 | 8 < 3 | 8 < 8 |
+-------+-------+-------+
| 1 | 0 | 0 |
+-------+-------+-------+
1 row in set (0.00 sec)
mysql>
以下(<=
)
2値の関係性が『以下』の演算は<=
演算子を使います。
mysql> SELECT 3 <= 8, 8 <= 3, 8 <= 8;
+--------+--------+--------+
| 3 <= 8 | 8 <= 3 | 8 <= 8 |
+--------+--------+--------+
| 1 | 0 | 1 |
+--------+--------+--------+
1 row in set (0.00 sec)
よりも大きい(>
)
2値の関係性が『よりも大きい』の演算は>
演算子を使います。
mysql> SELECT 8 > 3, 3 > 8, 8 > 8;
+-------+-------+-------+
| 8 > 3 | 3 > 8 | 8 > 8 |
+-------+-------+-------+
| 1 | 0 | 0 |
+-------+-------+-------+
1 row in set (0.00 sec)
以上(>=
)
2値の関係性が『以上』の演算は>=
演算子を使います。
mysql> SELECT 8 >= 3, 3 >= 8, 8 >= 8;
+--------+--------+--------+
| 8 >= 3 | 3 >= 8 | 8 >= 8 |
+--------+--------+--------+
| 1 | 0 | 1 |
+--------+--------+--------+
1 row in set (0.00 sec)
NULLである(IS NULL
)
ある値が『NULLである』の演算はIS NULL
演算子を使います。
mysql> SELECT NULL IS NULL, 8 IS NULL;
+--------------+-----------+
| NULL IS NULL | 8 IS NULL |
+--------------+-----------+
| 1 | 0 |
+--------------+-----------+
1 row in set (0.00 sec)
NULLではない(IS NOT NULL
)
ある値が『NULLではない』の演算はIS NOT NULL
演算子を使います。
mysql> SELECT NULL IS NOT NULL, 8 IS NOT NULL;
+------------------+---------------+
| NULL IS NOT NULL | 8 IS NOT NULL |
+------------------+---------------+
| 0 | 1 |
+------------------+---------------+
1 row in set (0.00 sec)
TRUE/FALSEである(IS
)
ある値が『TRUE/FALSEである』の演算はIS
演算子を使います。
mysql> SELECT 1 IS TRUE, 0 IS FALSE, 88 IS TRUE, 88 IS FALSE;
+-----------+------------+------------+-------------+
| 1 IS TRUE | 0 IS FALSE | 88 IS TRUE | 88 IS FALSE |
+-----------+------------+------------+-------------+
| 1 | 1 | 1 | 0 |
+-----------+------------+------------+-------------+
1 row in set (0.00 sec)
TRUE/FALSEではない(IS NOT
)
ある値が『TRUE/FALSEではない』の演算はIS NOT
演算子を使います。
mysql> SELECT 0 IS NOT TRUE, 1 IS NOT FALSE, 88 IS NOT TRUE, 88 IS NOT FALSE;
+---------------+----------------+----------------+-----------------+
| 0 IS NOT TRUE | 1 IS NOT FALSE | 88 IS NOT TRUE | 88 IS NOT FALSE |
+---------------+----------------+----------------+-----------------+
| 1 | 1 | 0 | 1 |
+---------------+----------------+----------------+-----------------+
1 row in set (0.00 sec)
value1以上、value2以下の値である(BETWEEN AND
)
ある値が『value1以上、value2以下の値である』の演算はBETWEEN AND
演算子を使います。
mysql> SELECT 8 BETWEEN 3 AND 10, 8 BETWEEN 11 AND 17, 8 BETWEEN 8 AND 10, 8 BETWEEN 3 AND 8;
+--------------------+---------------------+--------------------+-------------------+
| 8 BETWEEN 3 AND 10 | 8 BETWEEN 11 AND 17 | 8 BETWEEN 8 AND 10 | 8 BETWEEN 3 AND 8 |
+--------------------+---------------------+--------------------+-------------------+
| 1 | 0 | 1 | 1 |
+--------------------+---------------------+--------------------+-------------------+
1 row in set (0.00 sec)
value1以上、value2以下の値ではない(NOT BETWEEN AND
)
ある値が『value1以上、value2以下の値ではない』の演算はNOT BETWEEN AND
演算子を使います。
mysql> SELECT 8 NOT BETWEEN 3 AND 5, 8 NOT BETWEEN 5 AND 10, 8 NOT BETWEEN 8 AND 10, 8 NOT BETWEEN 3 AND 8;
+-----------------------+------------------------+------------------------+-----------------------+
| 8 NOT BETWEEN 3 AND 5 | 8 NOT BETWEEN 5 AND 10 | 8 NOT BETWEEN 8 AND 10 | 8 NOT BETWEEN 3 AND 8 |
+-----------------------+------------------------+------------------------+-----------------------+
| 1 | 0 | 0 | 0 |
+-----------------------+------------------------+------------------------+-----------------------+
1 row in set (0.00 sec)
実行結果から分かるように2つの値も含みます
いずれかの値に等しい(IN
)
ある値が『いずれかの値に等しい』の演算はIN
演算子を使います。
mysql> SELECT 8 IN (7, 8, 9) , 8 IN (1, 2, 3);
+----------------+----------------+
| 8 IN (7, 8, 9) | 8 IN (1, 2, 3) |
+----------------+----------------+
| 1 | 0 |
+----------------+----------------+
1 row in set (0.01 sec)
いずれの値とも等しくない(NOT IN
)
ある値が『いずれの値とも等しくない』の演算はNOT IN
演算子を使います。
mysql> SELECT 8 NOT IN (1, 2, 3), 8 NOT IN (7, 8, 9);
+--------------------+--------------------+
| 8 NOT IN (1, 2, 3) | 8 NOT IN (7, 8, 9) |
+--------------------+--------------------+
| 1 | 0 |
+--------------------+--------------------+
1 row in set (0.00 sec)
パターンにマッチする(LIKE
)
ある値が『パターンにマッチする』の演算はLIKE
演算子を使います。
mysql> SELECT 'Hello World' LIKE '%Hello%', 'Hello World' LIKE '%Good%';
+------------------------------+-----------------------------+
| 'Hello World' LIKE '%Hello%' | 'Hello World' LIKE '%Good%' |
+------------------------------+-----------------------------+
| 1 | 0 |
+------------------------------+-----------------------------+
1 row in set (0.01 sec)
パターン
パターンは文字列と%
、_
で表現します。
%
は任意の0文字以上の文字列、_
は任意の1文字を表わします。
パターンにマッチしない(NOT LIKE
)
ある値が『パターンにマッチしない』の演算はNOT LIKE
演算子を使います。
mysql> SELECT 'Hello World' NOT LIKE '%Good%', 'Hello World' NOT LIKE '%Hello%';
+---------------------------------+----------------------------------+
| 'Hello World' NOT LIKE '%Good%' | 'Hello World' NOT LIKE '%Hello%' |
+---------------------------------+----------------------------------+
| 1 | 0 |
+---------------------------------+----------------------------------+
1 row in set (0.00 sec)
パターン
パターンはLIKE
と同じで文字列と%
、_
で表現します。
%
は任意の0文字以上の文字列、_
は任意の1文字を表わします。