本文介绍了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中,严格按照以上优先级实现,在优先级相同的情况下,采用左结合的方式。