以下为所有比较运算符列表:
运算符 | 操作数 | 含义 | NULL参与运算 |
---|---|---|---|
= | 二元 | 等于。 | 结果为NULL。 |
<> /!= | 二元 | 不等于。 | 结果为NULL。 |
> | 二元 | 大于。 | 结果为NULL。 |
>= | 二元 | 大于等于。 | 结果为NULL。 |
< | 二元 | 小于。 | 结果为NULL。 |
<= | 二元 | 小于等于。 | 结果为NULL。 |
[NOT] IN | 二元 | 是否在集合中。 | 详见说明。 |
[NOT] BETWEEN AND | 三元 | 是否在区间内。 | 详见说明。 |
IS [NOT] TRUE | 一元 | 是否等于TRUE。 | 结果为TRUE或FALSE。 |
IS [NOT] FALSE | 一元 | 是否等于FALSE。 | 结果为TRUE或FALSE。 |
IS [NOT] NULL | 一元 | 是否等于NULL。 | 结果为TRUE或FALSE。 |
<=> | 二元 | 安全等于。 | 结果为TRUE或FALSE。 |
以下为部分运算符对NULL的特殊处理:
value [NOT] IN ()
:value为NULL时,结果为NULL。
value不为NULL、且集合包含NULL时,如果集合中有非NULL值与value相等,则结果为TRUE,否则为NULL。
value [NOT] BETWEEN lower AND upper
:value为NULL、或lower和upper都为NULL时,结果为NULL。
- value不为NULL、且只有lower/upper为NULL时,如果只通过value和lower/upper就能确定运算结果,则直接使用这个结果,否则返回NULL。
例如:
OceanBase (root@oceanbase)> SELECT 1 IN (1, NULL), 1 IN (2, NULL);
+----------------+----------------+
| 1 IN (1, NULL) | 1 IN (2, NULL) |
+----------------+----------------+
| 1 | NULL |
+----------------+----------------+
1 row in set (0.01 sec)
OceanBase (root@oceanbase)> SELECT 1 BETWEEN 0 AND NULL, 1 BETWEEN 2 AND NULL;
+----------------------+----------------------+
| 1 BETWEEN 0 AND NULL | 1 BETWEEN 2 AND NULL |
+----------------------+----------------------+
| NULL | 0 |
+----------------------+----------------------+
1 row in set (0.01 sec)