本文介紹了PolarDB-X支援的運算子。
邏輯運算子
PolarDB-X支援如下邏輯運算子:
運算子 | 描述 |
AND, && | 邏輯與 |
NOT, ! | 邏輯非 |
||, OR | 邏輯或 |
XOR | 邏輯異或 |
算術運算子
PolarDB-X支援如下算術運算子:
操作符 | 描述 |
/,DIV | 除法 |
%,MOD | 取餘 |
+ | 加法 |
* | 乘法 |
- | 減法 |
比較子
SELECT語句中的條件陳述式經常要使用比較子。通過這些比較子,可以判斷表中的哪些記錄是合格。比較結果為真,則返回1,為假則返回0,比較結果不確定則返回NULL。
PolarDB-X支援如下比較子:
函數名 | 描述 |
= | 等於 |
<>, != | 不等於 |
> | 大於 |
< | 小於 |
<= | 小於等於 |
>= | 大於等於 |
BETWEEN | 在兩值之間 >=min&&<=max |
NOT BETWEEN | 不在兩值之間 |
IN | 在集合中 |
NOT IN | 不在集合中 |
<=> | 比較兩個值是否相等,也可以比較NULL值 說明 兩個作業碼均為NULL時,其所得值為1;而當一個作業碼為NULL時,其所得值為0。 |
LIKE | 模糊比對 |
REGEXP或RLIKE | 正則式匹配 |
IS NULL | 為空白 |
IS NOT NULL | 不為空白 |
位元運算符
PolarDB-X支援如下位元運算符:
運算子 | 描述 |
& | 與運算子 |
~ | 非運算子 |
l | 或運算子 |
^ | 異或運算子 |
<< | 左移運算子 |
>> | 右移運算子 |
賦值運算子
PolarDB-X支援 '=' 賦值運算子,一般在UPDATE的SET部分出現。
PolarDB-X暫不支援 ':=' 賦值運算子。
運算子優先順序
PolarDB-X操作符的優先順序由高到低,如下所示:
優先順序 | 運算子 |
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與=優先順序
在MySQL 5.7.19中執行如下SQL:
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)
show warnings;
+---------+------+---------------------------------------+
| Level | Code | Message |
+---------+------+---------------------------------------+
| Warning | 1292 | Truncated incorrect DOUBLE value: 'a' |
+---------+------+---------------------------------------+
1 row in set (0.00 sec)
select 1 in (1, 2, 3) = 'a';
+----------------------+
| 1 in (1, 2, 3) = 'a' |
+----------------------+
| 0 |
+----------------------+
1 row in set, 1 warning (0.00 sec)
show warnings;
+---------+------+---------------------------------------+
| Level | Code | Message |
+---------+------+---------------------------------------+
| Warning | 1292 | Truncated incorrect DOUBLE value: 'a' |
+---------+------+---------------------------------------+
1 row in set (0.00 sec)
可見,在MySQL中,IN/NOT IN的優先順序高於=(比較子),在PolarDB-X中,嚴格按照以上優先順序實現,在優先順序相同的情況下,採用左結合的方式。