PolarDB-X では、論理演算子、算術演算子、比較演算子、ビット演算子、および代入演算子をサポートしています。本ページでは、各演算子の種類と、式の評価順序を決定する演算子の優先順位ルールについて説明します。
このページの内容:
論理演算子
| 演算子 | 説明 |
|---|---|
AND, && | 論理積(AND) |
NOT, ! | 論理否定(NOT) |
||, OR | 論理和(OR) |
XOR | 排他的論理和(XOR) |
算術演算子
| オペレーター | 説明 |
|---|---|
/, DIV | 部門 |
%, MOD | 1 つの数値を別の数値で割ったときの余りを返します |
+ | 加算 |
* | 乗算 |
- | 減算 |
比較演算子
比較演算子は、条件付き SELECT 文で行をフィルター処理する際に一般的に使用されます。各比較演算子は、以下の 3 つの値のいずれかを返します:
1— 比較が真である場合0— 比較が偽である場合NULL— 結果が不明である場合(通常、1 つまたは両方のオペランドが NULL の場合)
| 演算子 | 説明 |
|---|---|
= | 等しい |
<>, != | 等しくない |
> | より大きい |
< | より小さい |
<= | 以下(より小さいか等しい) |
>= | 以上(より大きいか等しい) |
BETWEEN | 値が範囲内(最小値以上かつ最大値以下)にある場合に真: value >= min AND value <= max |
NOT BETWEEN | 値が範囲外にある場合に真 |
IN | 値が指定された集合に含まれる場合に真 |
NOT IN | 値が指定された集合に含まれない場合に真 |
<=> | NULL 安全な等価比較:両方のオペランドが NULL の場合は 1 を返し、片方のオペランドが NULL の場合は 0 を返します |
LIKE | ワイルドカード % および _ を使用したパターンマッチング |
REGEXP, RLIKE | 正規表現を使用したパターンマッチング |
IS NULL | 値が NULL の場合に真 |
IS NOT NULL | 値が NULL でない場合に真 |
通常の等価演算子 (=) は、いずれかのオペランドが NULL の場合に NULL を返すため、WHERE句で予期しない結果を生じることがあります。NULL を含む可能性のある列を比較する場合は、<=>を使用してください。
ビット演算子
| オペレーター | 説明 |
|---|---|
& | ビットごとの論理積(AND) |
~ | ビットごとの論理否定(NOT) |
| | ビットごとの論理和(OR) |
^ | ビットごとの排他的論理和(XOR) |
<< | 左シフト |
>> | 右シフト |
代入演算子
PolarDB-X では、= という代入演算子をサポートしており、主に UPDATE 文の SET 句で使用されます。
PolarDB-X では、:= という代入演算子はサポートされていません。
演算子の優先順位
以下の表に、優先順位の高い順(15 が最も高い)に並べた演算子を示します。同じ優先順位の演算子は、左から右へと評価されます。
| 優先順位 | 演算子 | 種類 |
|---|---|---|
| 15 | ! | 単項(プレフィックス) |
| 14 | -(単項マイナス)、~ | 単項(プレフィックス) |
| 13 | ^ | 二項 |
| 12 | *、/、%、MOD | 二項 |
| 11 | +、- | 二項 |
| 10 | <<、>> | 二項 |
| 9 | & | 二項 |
| 8 | | | 二項 |
| 7 | =(比較)、<=>、>、>=、<、<=、<>、!=、IS、LIKE、REGEXP、IN | バイナリ |
| 6 | BETWEEN | 三項 |
| 5 | NOT | 単項(プレフィックス) |
| 4 | AND、&& | 二項 |
| 3 | XOR | 二項 |
| 2 | OR、|| | 二項 |
| 1 | =(代入) | 二項 |
IN および NOT IN の優先順位
IN および NOT IN は、= 比較演算子よりも優先順位が高くなります。以下の例は MySQL 5.7.19 で実行されたものであり、この動作を示しています。PolarDB-X も同様の優先順位ルールに従います。
SELECT BINARY 'a' = 'a' IN (1, 2, 3);実行結果:
+-------------------------------+
| binary 'a' = 'a' in (1, 2, 3) |
+-------------------------------+
| 1 |
+-------------------------------+
1 row in set, 1 warning (0.01 sec)この式は、BINARY 'a' = ('a' IN (1, 2, 3)) のように評価され、(BINARY 'a' = 'a') IN (1, 2, 3) のようには評価されません。これは、IN の優先順位が = よりも高いためです。
SELECT 1 IN (1, 2, 3) = 'a';実行結果:
+----------------------+
| 1 in (1, 2, 3) = 'a' |
+----------------------+
| 0 |
+----------------------+
1 row in set, 1 warning (0.00 sec)どちらのクエリでも、警告 1292:Truncated incorrect DOUBLE value: 'a' が発生します。
MySQL 互換性
PolarDB-X は、以下の例外を除き、MySQL の演算子構文と互換性があります。
| 演算子 | MySQL のサポート状況 | PolarDB-X のサポート状況 |
|---|---|---|
:=(代入) | サポート済み | 未サポート |