比較演算は、1
(TRUE)、0
(FALSE)、または
NULL
の値を返します。このような関数は、数値と文字列の両方に作用します。必要に応じて、文字列は数値に、数値は文字列に、自動的に変換されます(Perl
と同様)。
MySQL では、比較は次の規則に基づいて行われます。
デフォルトでは、文字列の比較は、現在のキャラクタセット(デフォルトでは ISO-8859-1 Latin1。これは英語でも非常によく動作する)を使用して、ケース非依存方式で行われます。
いずれかの標準演算子(=
や
<>
など。LIKE
は含まない)を使用してケース非依存文字列を比較する場合、後続の空白(スペース、タブ、改行復帰)は無視されます。
mysql> SELECT "a" ="A \n";
-> 1
以下の例は、比較演算での文字列から数値への変換を示したものです。
mysql>SELECT 1 > '6x';
-> 0 mysql>SELECT 7 > '6x';
-> 1 mysql>SELECT 0 > 'x6';
-> 0 mysql>SELECT 0 = 'x6';
-> 1
注意: 次のように、文字列型のカラムを数値型と比較する場合、MySQL では、インデックスを使用した値の迅速な検索は実行できません。
SELECT * FROM table_name WHERE string_key=1
その理由は、値 1
を返す可能性があるさまざまな文字列("1"
、"
1"
、"1a"
など)があるためです。
=
等しい
mysql>SELECT 1 = 0;
-> 0 mysql>SELECT '0' = 0;
-> 1 mysql>SELECT '0.0' = 0;
-> 1 mysql>SELECT '0.01' = 0;
-> 0 mysql>SELECT '.01' = 0.01;
-> 1
<>
, !=
等しくない
mysql>SELECT '.01' <> '0.01';
-> 1 mysql>SELECT .01 <> '0.01';
-> 0 mysql>SELECT 'zapp' <> 'zappp';
-> 1
<=
より小さいか等しい
mysql> SELECT 0.1 <= 2;
-> 1
<
より小さい
mysql> SELECT 2 < 2;
-> 0
>=
より大きいか等しい
mysql> SELECT 2 >= 2;
-> 1
>
より大きい
mysql> SELECT 2 > 2;
-> 0
<=>
等しい(NULL
対応)
mysql> SELECT 1 <=> 1, NULL <=> NULL, 1 <=> NULL;
-> 1 1 0
IS NULL
, IS NOT
NULL
値が NULL
であるかないかのテスト
mysql>SELECT 1 IS NULL, 0 IS NULL, NULL IS NULL;
-> 0 0 1 mysql>SELECT 1 IS NOT NULL, 0 IS NOT NULL, NULL IS NOT NULL;
-> 1 1 0
他のプログラムに対して適切に動作するように、MySQL
では、IS NULL
の使用時において次の追加機能をサポートしている。
直前に挿入されたレコードの検索
SELECT * FROM tbl_name WHERE auto_col IS NULL
これを無効化するには、SQL_AUTO_IS_NULL=0
を設定する。 See
項5.5.6. 「SET
構文」。
NOT NULL
DATE
型と DATETIME
型のカラムでの、特殊な日付
0000-00-00
の検索
SELECT * FROM tbl_name WHERE date_column IS NULL
これは、一部の ODBC
アプリケーションで必要になる(ODBC
では 0000-00-00
日付をサポートしていないため)。
expr BETWEEN min AND max
expr
が min
以上で、max
以下の場合は
1
を返す。それ以外の場合は、0
を返す。すべての引数が同じ型の場合、これは式
(min <= expr AND expr <= max)
と同じ。引数の型が異なる場合、前述の規則にもとづいて型変換が実行される。この場合、型変換は
3
つすべての引数に適用される。注意:
4.0.5 より前のバージョンでは、引数は
expr
の型に変換されていた。
mysql>SELECT 1 BETWEEN 2 AND 3;
-> 0 mysql>SELECT 'b' BETWEEN 'a' AND 'c';
-> 1 mysql>SELECT 2 BETWEEN 2 AND '3';
-> 1 mysql>SELECT 2 BETWEEN 2 AND 'x-3';
-> 0
expr NOT BETWEEN min AND max
NOT (expr BETWEEN min AND max)
と同じ。
expr IN (value,...)
expr
が IN
リストのいずれかの値のときは
1
を返す。それ以外の場合は
0
を返す。すべての値が定数なら、値はすべて
expr
の型に基づいて評価され、ソートされる。その後、バイナリ検索によってアイテムが検索される。したがって、IN
の値リストが定数だけで構成されている場合、IN
は非常に迅速に行われる。expr
がケース依存の文字列式の場合、文字列の比較はケース依存方式で行われる。
mysql>SELECT 2 IN (0,3,5,'wefwf');
-> 0 mysql>SELECT 'wefwf' IN (0,3,5,'wefwf');
-> 1
IN
リストの値の数は、max_allowed_packet
値のみによって制限される。
4.1 以降(SQL-99
標準に準拠するため)、IN
では、左側の式が NULL
の場合だけでなく、リストに一致するものが見つからず、リスト内の式の
1 つが NULL
の場合にも
NULL
が返る。
MySQL バージョン 4.1 以降では、IN()
節にサブクエリを組み込むこともできる。
See 項6.4.2.3. 「ANY
、IN
、SOME
とともに使用したサブクエリ」。
expr NOT IN (value,...)
NOT (expr IN (value,...))
と同じ。
ISNULL(expr)
expr
が NULL
の場合は 1
を返す。それ以外の場合は 0
を返す。
mysql>SELECT ISNULL(1+1);
-> 0 mysql>SELECT ISNULL(1/0);
-> 1
注意: =
を使用した
NULL
値の比較は常に false
になる。
COALESCE(list)
リスト内の最初の非 NULL
要素を返す。
mysql>SELECT COALESCE(NULL,1);
-> 1 mysql>SELECT COALESCE(NULL,NULL,NULL);
-> NULL
INTERVAL(N,N1,N2,N3,...)
N
< N1
の場合は 0
、N
< N2
の場合は
1
(以下同様)というように値を返す。N
が NULL
の場合は
-1
を返す。引数はすべて整数として扱われる。この関数で
N1
< N2
<
N3
< ...
<
Nn
を正しく動作させるには、引数を整数として扱う必要がある。これはバイナリ検索(非常に迅速)が使用されるからである。
mysql>SELECT INTERVAL(23, 1, 15, 17, 30, 44, 200);
-> 3 mysql>SELECT INTERVAL(10, 1, 10, 100, 1000);
-> 2 mysql>SELECT INTERVAL(22, 23, 30, 44, 200);
-> 0
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.