mysql演算子

伊谢尔伦
リリース: 2016-11-23 13:08:41
オリジナル
1070 人が閲覧しました

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_pa​​cket 値によってのみ制限されます。

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);

-> 3

mysql>選択間隔(10, 1, 10, 100, 1000);

- > t ; 2

mysql> SELECT INTERVAL(22, 23, 30, 44, 200);

-> 0

・LEAST(value1,value2,...)

これにパラメータが2つ以上ある場合この場合、戻り値は最小 (最小値) 引数です。独立変数を比較するには、次のルールを使用します。

戻り値が INTEGER コンテキストで使用される場合、またはすべてのパラメーターが整数値である場合、それらは整数値として比較されます。

戻り値が REAL コンテキストで使用される場合、またはすべてのパラメーターが実数値の場合、実数値として比較されます。

いずれかのパラメータが大文字と小文字を区別する文字列である場合、パラメータは大文字と小文字を区別する文字列に従って比較されます。

他の場合、引数は大文字と小文字を区別する文字列として比較されます。

独立変数が NULL の場合、LEAST() の戻り値は NULL になります。

mysql> SELECT LEAST(2,0);

-> 0

mysql> '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 になります。

-> 0

mysql> 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 の計算

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート