MySQL中的"<=>"是什么意思?

17
MySQL 中的 <=> 代表什么意思,有什么作用?

可能是MySQL中的这个运算符<=>的重复问题。 - Salman A
这个比较旧,已经有3年了... - kuba
那个问题有6倍的浏览量和2倍的回答数。SO是一个奇怪的地方。 - Salman A
5个回答

16

手册中已经详细说明:

NULL安全等于号。该运算符执行类似于=运算符的等于比较,但是如果两个操作数都为NULL,则返回1而不是NULL,如果一个操作数为NULL,则返回0而不是NULL。

mysql> select NULL <=> NULL;
+---------------+
| NULL <=> NULL |
+---------------+
|             1 |
+---------------+
1 row in set (0.00 sec)

mysql> select NULL = NULL;
+-------------+
| NULL = NULL |
+-------------+
|        NULL |
+-------------+
1 row in set (0.00 sec)

mysql> select NULL <=> 1;
+------------+
| NULL <=> 1 |
+------------+
|          0 |
+------------+
1 row in set (0.00 sec)

mysql> select NULL = 1;
+----------+
| NULL = 1 |
+----------+
|     NULL |
+----------+
1 row in set (0.00 sec)

mysql> 

4

这是 NULL安全等于运算符

<=>和=之间的区别在于当一个或两个操作数为NULL值时。例如:

NULL <=> NULL gives True
NULL = NULL   gives NULL

这是值1、2和NULL进行<=>比较的完整表格:
     |  1      2    NULL
-----+-------------------
1    | 真     假    假
2    | 假     真    假
NULL | 假     假    真
与普通的等号运算符相比:
     |  1      2    NULL
-----+-------------------
1    | 真     假    NULL
2    | 假     真    NULL
NULL | NULL   NULL  NULL

2
"<=>" 是一种所谓的 "NULL 安全等号运算符"
SELECT 1 <=> 1, NULL <=> NULL, 1 <=> NULL; 
-> 1, 1, 0

SELECT 1 = 1, NULL = NULL, 1 = NULL;
-> 1, NULL, NULL


1

这与 SQL 标准关键字 DISTINCT 相同。

SELECT * FROM somewhere WHERE `address1` is not distinct from `address2`

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接