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