1. 演算子の優先順位
次のリストは、演算子の優先順位を低いものから高いものまで示しています。同じ行にリストされている演算子は同じ優先順位を持ちます。
:=
||、OR、=、<、<>、!=、IS、LIKE、REGEXP、IN
|
&
<<, >>
-、+
*、/、DIV、%、MOD
^
- (単項マイナス記号)、~ (単項ビット反転)
!
BINARY、COLLATE
注: HIGH_NOT_PRECEDENCE SQL モードがアクティブ化されている場合、NOT の優先順位は ! 演算と同じです。記号は同じです。
2. 括弧
( ... ) は、式の演算順序を指定するために使用します。例:
mysql> SELECT 1+2*3; -> 7 mysql> SELECT (1+2)*3; -> 9
3. 比較関数と演算子
比較演算の結果は 1 (TRUE)、0 ( FALSE) または NULL。これらの操作は数値と文字列に対して使用できます。必要に応じて、文字列は自動的に数値に変換され、数値は自動的に文字列に変換されます。
この章の一部の関数 (LEAST() や GREATEST() など) には、1 (TRUE)、0 (FALSE)、および NULL が含まれません。ただし、結果の値は、次のルールに従って動作する比較操作に基づいています。
MySQL は、次のルールに従って数値比較を実行します。
1 つまたは両方のパラメータが NULL の場合、NULL セーフでない場合 <=> etc. シンボルの場合、比較演算の結果は NULL になります。
同じ比較操作の 2 つのパラメーターが両方とも文字列である場合、比較は文字列に基づいて行われます。
両方のパラメーターが整数の場合、比較は整数に基づいて行われます。
16進数値を数値として比較する必要がない場合、バイナリ文字列として処理されます。
パラメータの 1 つが TIMESTAMP または DATETIME 列で、他のパラメータが定数の場合、定数は比較前にタイムスタンプに変換されます。この目的は、ODBC をよりスムーズに実行できるようにすることです。これは IN() のパラメータには適用されないことに注意してください! 信頼性を高めるため、比較を行う際には通常、完全な日付時刻/日付/時刻文字列が使用されます。
他の場合、引数は浮動小数点数として比較されます。
デフォルトでは、文字列比較では大文字と小文字が区別されず、既存の文字セット (デフォルトでは cp1252 Latin1、英語にも適しています) が使用されます。
比較のために、CAST() 関数を使用して値を別の型に変換できます。 CONVERT() を使用して、文字列値を別の文字セットに変換します。
次の例は、比較演算で文字列を数値に変換するプロセスを示しています。 > 1
mysql> 'x6';
-> 0
-> 文字列をリストするときは、ただし、MySQL は高速ルックアップにカラムのインデックスを使用できません。 str_col がインデックス付き文字列列の場合、インデックスは次のステートメントで検索関数を実行できません:
SELECT * FROM tbl_name WHERE str_col=1;
その理由は、多くの異なる文字列を値 1: '1' に変換できるためです。 , ' 1', '1a', ...
=
は次と同等です:
mysql> SELECT '0' = 0; > 1
mysql> '0.0' = 0;
-> 1
' = 0.01;
> NULL セーフこの演算子は = 演算子と同じ比較演算を実行しますが、両方のオペコードが NULL の場合、結果の値は NULL ではなく 1 になり、オペコードが NULL の場合、結果の値は NULL ではなく 0 になります。
> SELECT 1 1、NULL NULL;
-> SELECT 1 = 1、NULL = NULL, 1 = NULL;
-> 1, NULL, NULL
<> != SELECT '.01' <> > 1> SELECT '0.01';-> 'zapp';->以下:
mysql> SELECT 0.1
未満:
mysql> 0
> =
は次の値以上です:
mysql>= 2;
-> 1
> は次の値より大きいです:
mysql> 2;
-> 0
IS boolean_value IS NOT boolean_value
ブール値に基づいて値をテストします。ここで、ブール値は TRUE、FALSE、または UNKNOWN です。
mysql> SELECT 1 は TRUE、0 は FALSE、NULL は不明;
-> 1, 1, 1
mysql> SELECT 1 は不明、0 は不明、NULL は不明;
- > 1, 1, 0
IS NULL IS NOT NULL
値が NULL かどうかをテストします。
mysql> SELECT 1 は NULL、0 は NULL、NULL は NULL;
-> 0, 0, 1
mysql> SELECT 1 は NULL ではない、0 は NULL ではない、NULL は NULL ではない;
- > 1, 1, 0
ODBC プログラムをスムーズに操作するために、MySQL は IS NULL を使用するときに次の追加機能をサポートします:
値が生成されたら、すぐに次の形式のステートメントを実行して最新の AUTO_INCREMENT を見つけます。値の値: eO SELECT * From TBL_NAME WHERE Auto_Col is Null
SQL_AUTO_IS_NULL = 0 の場合、操作を実行できない場合。
NOT NULL という名前の DATE 列と DATETIME 列の場合、次のステートメントを使用して特定の日付 '0000-00-00' を見つけることができます:
o SELECT * FROM tbl_name WHERE date_column IS NULL
これを実行するにはいくつかの ODBC が必要ですODBC 自体は「0000-00-00」時間値をサポートしていないため、ステップ アプリケーション ソフトウェアを使用してください。
expr BETWEEN min AND max
expr が min 以上で、 expr が max 以下の場合、BETWEEN の戻り値は 1 または 0 です。すべてのパラメータが同じタイプの場合、上記の関係は式 (min
mysql> 2 と 3 の間で 1 を選択;
mysql> EN 2 と ' 3';
mysql> 2 と 3 の間で 2 を選択'x-3';
-> 0
expr NOT BETWEEN min AND max
これは NOT(expr BETWEEN min AND max ) と同等です。
· COALESCE(value,...)
戻り値はリスト内の最初の非 NULL 値です。NULL 以外の値がない場合、戻り値は NULL です。
mysql> SELECT COALESCE(NULL,1);
-> 1
mysql> )
パラメータが 2 つ以上ある場合、戻り値は最も大きい (最大値) パラメータになります。パラメータを比較するルールは LEAST() の場合と同じです。
mysql> SELECT GREATEST(2,0);
-> SELECT GREATEST('B' ,'A','C');
->引数が NULL でない場合、GREATEST() の戻り値は NULL になります。
· 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 値によってのみ制限されます。
SQL 標準との一貫性を保つため、左側の式が NULL の場合、テーブル内で一致が見つからない場合、またはテーブル内の式が NULL の場合、IN の戻り値は NULL になります。
IN() コンストラクトを使用して、特定の種類のサブクエリを作成することもできます。
・expr NOT IN (value,...)
これはNOT (expr IN (value,...))と同じです。
ISNULL(expr)
expr が NULL の場合、ISNULL() の戻り値は 1 になり、それ以外の場合、戻り値は 0 になります。
SELECT ISNULL(1+1); mysql> ISNULL() 関数には、IS NULL 比較演算子と同じ特性がいくつかあります。 IS NULL に関する注記を参照してください。 · INTERVAL(N,N1,N2,N3,...) N mysql>選択間隔(23, 1, 15, 17, 30, 44, 200);-> 3mysql>選択間隔(10, 1, 10, 100, 1000);- > t ; 2mysql> SELECT INTERVAL(22, 23, 30, 44, 200);-> 0・LEAST(value1,value2,...)これにパラメータが2つ以上ある場合この場合、戻り値は最小 (最小値) 引数です。独立変数を比較するには、次のルールを使用します。 戻り値が INTEGER コンテキストで使用される場合、またはすべてのパラメーターが整数値である場合、それらは整数値として比較されます。 戻り値が REAL コンテキストで使用される場合、またはすべてのパラメーターが実数値の場合、実数値として比較されます。 いずれかのパラメータが大文字と小文字を区別する文字列である場合、パラメータは大文字と小文字を区別する文字列に従って比較されます。 他の場合、引数は大文字と小文字を区別する文字列として比較されます。 独立変数が NULL の場合、LEAST() の戻り値は NULL になります。 mysql> SELECT LEAST(2,0);-> 0mysql> 'A'上記の変換ルールは、一部のエッジケースで奇妙な結果を生成します: mysql> SELECT CAST(LEAST(3600, 9223372036854775808.0 ) as SIGNED);-> -9223372036854775808これは、MySQL が読み取るために発生します。整数コンテキストの 9223372036854775808.0 。整数表現は数値を保持するのに役立たないため、符号付き整数が含まれます。 4. 論理演算子 SQL では、すべての論理演算子の評価結果は TRUE、FALSE、または NULL (UNKNOWN) になります。 MySQL では、これらは 1 (TRUE)、0 (FALSE)、および NULL として表されます。それらのほとんどはさまざまなデータベース SQL に共通ですが、サーバーによっては TRUE としてゼロ以外の値を返す場合があります。 NOT !論理的NOT。オペランドが 0 の場合、戻り値は 1 になり、オペランドが 0 以外の場合、戻り値は 0 になり、オペランドが NOT NULL の場合、戻り値は NULL になります。 -> 0mysql> SELECT NOT 0;->mysql> (1 +1) );
-> 0
mysql> SELECT ! 1+1;
-> 1
式は (!1)+ 1 として評価されるため、結果は 1 になります。
AND &&
論理積。すべてのオペランドが非ゼロまたは NULL の場合、計算結果は 1 になります。1 つ以上のオペランドが 0 の場合、結果は 0 になります。それ以外の場合、戻り値は NULL になります。
mysql> SELECT 1 && 1;
-> 1
mysql> SELECT 1 && NULL;
-> ; NULL
mysql> SELECT 0 && NULL;
-> 0
> SELECT NULL && 0;
-> OR ||
論理和。両方のオペランドが NULL 以外の場合、どちらかのオペランドが 0 以外の場合、結果は 1 になり、それ以外の場合、結果は 0 になります。一方のオペランドが NULL の場合、もう一方のオペランドがゼロ以外の場合、結果は 1 になり、それ以外の場合、結果は NULL になります。両方のオペランドが NULL の場合、結果は NULL になります。
->
-> SELECT 1 || 1;
->
mysql> SELECT 0 | |NULL;->NULL>SELECT 1 || NULL;->論理XOR。いずれかのオペランドが NULL の場合、戻り値は NULL になります。 NULL 以外のオペランドの場合、奇数オペランドの値が 0 以外の場合、計算結果は 1 になり、それ以外の場合は 0 になります。
mysql>SELECT 1 XOR 1;
-> SELECT 1 XOR 1 XOR 1;
a の計算