MySQL @Wiki 実用リファレンス

比較演算子

最終更新:

my-sql

- view
管理者のみ編集可


比較演算子

=
等しい

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 を設定する。
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 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() 節にサブクエリを組み込むこともできる。


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


記事メニュー
目安箱バナー