PolarDB-X 1.0 では、SQL 演算子が固定された優先順位に従って評価されます。同一の優先順位を持つ演算子が複数存在する場合、左から右へと順に評価されます。
以下の表は、サポートされるすべての演算子を、優先順位の高いものから低いものへと並べたものです。
| 優先順位 | オペレーター | 説明 |
|---|---|---|
| 15 | ! | 論理否定(NOT) |
| 14 | -(単項マイナス)、~ | 単項否定、ビット単位 NOT |
| 13 | ^ | ビット単位排他的論理和(XOR) |
| 12 | *、/、%、MOD | 乗算、除算、剰余算 |
| 11 | +、- | 加算、減算 |
| 10 | <<、>> | ビット単位シフト |
| 9 | & | ビット単位論理積(AND) |
| 8 | | | ビット単位論理和(OR) |
| 7 | =(比較)、<=>、>、>=、<、<=、<>、!=、IS、LIKE、REGEXP、IN | 比較演算子 |
| 6 | BETWEEN | 範囲包含 |
| 5 | NOT | 論理否定 |
| 4 | AND、&& | 論理積(AND) |
| 3 | XOR | 論理排他的論理和(XOR) |
| 2 | OR、|| | 論理和(OR) |
| 1 | =(代入) | 変数への代入 |
任意の式においてデフォルトの優先順位をオーバーライドするには、括弧を使用してください。
IN および NOT IN 対 = 比較演算子
IN および NOT IN の優先順位は、= 比較演算子より高くなります。以下の例は MySQL 5.7.19 で実行され、この優先順位の違いがクエリ結果に与える影響を示しています。
例 1: IN は = よりも先に評価されます。'a' in (1, 2, 3) の式が最初に評価され、1(真)を返します。その後、binary 'a' = 1 が評価されます。
mysql> 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)
mysql> show warnings;
+---------+------+---------------------------------------+
| Level | Code | Message |
+---------+------+---------------------------------------+
| Warning | 1292 | Truncated incorrect DOUBLE value: 'a' |
+---------+------+---------------------------------------+
1 row in set (0.00 sec)例 2: 1 in (1, 2, 3) が最初に評価され、1(真)を返します。その後、1 = 'a' が評価され、0(偽)を返します。
mysql> select 1 in (1, 2, 3) = 'a';
+----------------------+
| 1 in (1, 2, 3) = 'a' |
+----------------------+
| 0 |
+----------------------+
1 row in set, 1 warning (0.00 sec)
mysql> show warnings;
+---------+------+---------------------------------------+
| Level | Code | Message |
+---------+------+---------------------------------------+
| Warning | 1292 | Truncated incorrect DOUBLE value: 'a' |
+---------+------+---------------------------------------+
1 row in set (0.00 sec)PolarDB-X 1.0 は、上記の優先順位表を厳密に準拠します。