名前 | 説明 |
---|---|
BETWEEN ...
AND ... |
ある値が値の範囲内に収まっているかどうかを確認します |
COALESCE() |
NULL 以外の最初の引数を返します |
<=> |
NULL-安全等価演算子 |
= |
等価演算子 |
>= |
「より大きいか等しい」演算子 |
> |
「より大きい」演算子 |
GREATEST() |
最大の引数を返します |
IN() |
ある値が一連の値に含まれているかどうかを確認します |
INTERVAL() |
第 1 引数より小さい引数のインデックスを返します |
IS NOT
NULL |
NOT NULL 値テスト |
IS
NOT |
ブール値に対して値をテストします |
IS
NULL |
NULL 値テスト |
IS |
ブール値に対して値をテストします |
ISNULL() |
引数が NULL かどうかをテストします |
LEAST() |
最小の引数を返します |
<= |
「より小さいか等しい」演算子 |
< |
「より小さい」演算子 |
LIKE |
単純なパターンマッチング |
NOT
BETWEEN ... AND ... |
ある値が値の範囲内に収まっていないかどうかを確認します |
!= ,
<> |
「等しくない」演算子 |
NOT
IN() |
ある値が一連の値に含まれていないかどうかを確認します |
NOT
LIKE |
単純なパターンマッチングを否定します |
STRCMP() |
2 つの文字列を比較します |
比較の演算の結果は、1
(TRUE
)
、0
(FALSE
) 、または
NULL
の値になります。これらの演算は、数字と文字列の両方に適応します。必要に応じて、文字列は数字に、数字は文字列に自動的に変換されます。
次の関係比較演算子を使えば、スカラーオペランドの比較だけでなく行オペランドの比較も行えます。
= > < >= <= <> !=
行比較の例については、項8.2.9.5. 「行サブクエリー」を参照してください。
この節の関数のうちには、1
(TRUE
)
、0
(FALSE
) 、または
NULL
以外の値を返すものもあります。LEAST()
および
GREATEST()
などがその例です。しかし、それらが戻す値は、項7.2.2. 「式評価での型変換」
で説明されている規則によって行われた比較の演算に基づいています。
比較のために値を特定の型に変換するには、CAST()
関数を使用することができます。文字列値は、CONVERT()
を使用して、異なるキャラクタセットに変換することが可能です。項7.9. 「キャスト関数と演算子」
を参照してください。
デフォルトによって、文字比較は大文字小文字の区別の必要はなく、現在のキャラクタセットを使用します。デフォルトは
latin1
(cp1252 West European)
で、English でも正常に作用します。
等しい :
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
NULL
-
安全等価。この演算は、=
演算子のように、等価比較を行いますが、両方のオペランドが
NULL
であれば、NULL
でなく 1
を返し、一方のオペランドが
NULL
の場合は、NULL
でなく 0
を返します。
mysql>SELECT 1 <=> 1, NULL <=> NULL, 1 <=> NULL;
-> 1, 1, 0 mysql>SELECT 1 = 1, NULL = NULL, 1 = NULL;
-> 1, NULL, NULL
等しくない :
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
boolean_value
が
TRUE
か
FALSE
、または
UNKNOWN
になり得る、ブーリアン値に対して値をテストします。
mysql> SELECT 1 IS TRUE, 0 IS FALSE, NULL IS UNKNOWN;
->
1, 1, 1
boolean_value
が
TRUE
か
FALSE
、または
UNKNOWN
になり得る、ブーリアン値に対して値をテストします。
mysql> SELECT 1 IS NOT UNKNOWN, 0 IS NOT UNKNOWN, NULL IS NOT UNKNOWN;
-> 1, 1, 0
値が NULL
かどうかをテストします。
mysql> SELECT 1 IS NULL, 0 IS NULL, NULL IS NULL;
-> 0, 0,
1
ODBC
プログラムとの連携が正しく機能するよう、MySQL
では IS NULL
の使用時に次の追加機能がサポートされます。
一番最近の
AUTO_INCREMENT
値を含む行を、その値を生成した直後に、次のフォームのステートメントを発行することによって検索することができます
:
SELECT * FROMtbl_name
WHEREauto_col
IS NULL
この動作を無効にするには、sql_auto_is_null
= 0
と設定します。Session System Variables
を参照してください。
NOT NULL
として宣言された
DATE
および DATETIME
カラムでは、次のようなステートメントを使用することで、特殊な日付
'0000-00-00'
を検索することができます :
SELECT * FROMtbl_name
WHEREdate_column
IS NULL
ODBC は '0000-00-00'
をサポートしていないため、ODBC
アプリケーションのあるものの作動にこれが必要になります。
値が NULL
でないかどうかをテストします。
mysql> SELECT 1 IS NOT NULL, 0 IS NOT NULL, NULL IS NOT NULL;
-> 1, 1, 0
expr
が
min
より多いか等しく、expr
が max
より少ないか等しい場合、BETWEEN
は 1
を返し、それ以外では
0
を返します。すべての引数が同じ型の場合は、これは式
(
と等価になります。または、項7.2.2. 「式評価での型変換」
にある規則によって型変換が実施されますが、3
つすべての引数に適用されます。
min
<= expr
AND
expr
<=
max
)
mysql>SELECT 2 BETWEEN 1 AND 3, 2 BETWEEN 3 and 1;
-> 1, 0 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
BETWEEN
を日付値または時刻値と使用する場合に最善の結果を得るには、値を所望のデータ型に明示的に変換するため、CAST()
を使用します。例 :
DATETIME
をふたつの
DATE
値と比較する場合、DATE
値を
DATETIME
値に変換します。'2001-1-1'
のような文字列定数を、DATE
との比較で使用する場合、文字列を
DATE
にキャストします。
これは、NOT
(
と同様です。
expr
BETWEEN
min
AND
max
)
リストの最初の非
NULL
値を返すか、非
NULL
値がない場合は
NULL
を返します。
mysql>SELECT COALESCE(NULL,1);
-> 1 mysql>SELECT COALESCE(NULL,NULL,NULL);
-> NULL
引数ふたつ以上では、最大の (最大値の)
引数を返します。それらの引数は、LEAST()
に対するものと同じ規則で比較されます。
mysql>SELECT GREATEST(2,0);
-> 2 mysql>SELECT GREATEST(34.0,3.0,5.0,767.0);
-> 767.0 mysql>SELECT GREATEST('B','A','C');
-> 'C'
引数のどれかが
NULL
である場合、GREATEST()
は NULL
を返します。
expr
が、IN
リストのどれかの値と等しい場合は
1
を返し、それ以外では
0
を返します。すべての値が定数の場合、expr
の型に基づいて評価し、分類します。その際の項目の検索は、バイナリ検索を使って行われます。これはつまり、IN
は、IN
値のリストがすべて定数で構成されている場合、非常に速いということです。または、項7.2.2. 「式評価での型変換」
にある規則によって型変換が実施されますが、すべての引数に適用されます。
mysql>SELECT 2 IN (0,3,5,7);
-> 0 mysql>SELECT 'wefwf' IN ('wee','wefwf','weg');
-> 1
引用符で括られた値 (文字列など)
と括られていない値 (数字など)
の比較規則は異なるため、IN
リストの引用符で括られた値と、括られていない値を決して混同しないでください。型の混同は、上記の理由により、結果の矛盾の原因になることがあります。たとえば、IN
式を次のようには書かないでください :
SELECT val1 FROM tbl1 WHERE val1 IN (1,2,'a');
正しい書き方はこのようになります :
SELECT val1 FROM tbl1 WHERE val1 IN ('1','2','a');
IN
リストの値の数は、max_allowed_packet
値によってのみ制限されます。
SQL
の標準に準拠するため、IN
は、左側の式が
NULL
である場合だけでなく、リストに一致するものがない場合、また、リストの式のひとつが
NULL
である場合にも、NULL
を返します。
IN()
構文は、ある種の副問い合わせを書くのにも使用できます。項8.2.9.3. 「ANY
、IN
、そして
SOME
を持つサブクエリー」
を参照してください。
これは、NOT
(
と同様です。
expr
IN
(value
,...))
expr
が
NULL
の場合、ISNULL()
は 1
を返し、それ以外では
0
を返します。
mysql>SELECT ISNULL(1+1);
-> 0 mysql>SELECT ISNULL(1/0);
-> 1
=
の代わりに、ISNULL()
を使って、値が
NULL
であるかテストすることができます。=
で値を
NULL
と比較すると、常に false が生じます)。
ISNULL()
関数は
IS
NULL
比較演算子と、いくつかの特殊な動作を共有します。IS
NULL
の解説を参照してください。
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
引数ふたつ以上では、最小の (最小値の) 引数を返します。引数は次の規則を使用して比較されます :
戻り値が
INTEGER
文脈で使用されている場合、またはすべての引数が整数値である場合、それらは整数として比較されます。
戻り値が
REAL
文脈で使用されている場合、またはすべての引数が実数値である場合、それらは実数として比較されます。
引数のいずれかが大文字小文字の区別のある文字列である場合、引数は大文字小文字の区別のある文字列として比較されます。
ほかのすべてのケースでは、引数は大文字小文字の区別のある文字列として比較されます。
引数のどれかが
NULL
である場合、LEAST()
は NULL
を返します。
mysql>SELECT LEAST(2,0);
-> 0 mysql>SELECT LEAST(34.0,3.0,5.0,767.0);
-> 3.0 mysql>SELECT LEAST('B','A','C');
-> 'A'
上記の変換規則は、いくつかの境界例では異常な結果を引き起こす場合がありますのでご注意ください :
mysql> SELECT CAST(LEAST(3600, 9223372036854775808.0) as SIGNED);
-> -9223372036854775808
これは、MySQL が
9223372036854775808.09223372036854775808.0
を整数の文脈で読み取ることが原因で起こります。整数表記は値を保持するのに十分ではないので、符号付整数にラップします。