本文介紹了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中,嚴格按照以上優先級實現,在優先級相同的情況下,采用左結合的方式。