MySQL 中的
<=>
代表什么意思,有什么作用?手册中已经详细说明:
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>
这是 NULL安全等于运算符。
<=>和=之间的区别在于当一个或两个操作数为NULL值时。例如:
NULL <=> NULL gives True
NULL = NULL gives NULL
<=>
比较的完整表格:
| 1 2 NULL -----+------------------- 1 | 真 假 假 2 | 假 真 假 NULL | 假 假 真与普通的等号运算符相比:
| 1 2 NULL -----+------------------- 1 | 真 假 NULL 2 | 假 真 NULL NULL | NULL NULL NULL
<=>
" 是一种所谓的 "NULL 安全等号运算符"。SELECT 1 <=> 1, NULL <=> NULL, 1 <=> NULL;
-> 1, 1, 0
SELECT 1 = 1, NULL = NULL, 1 = NULL;
-> 1, NULL, NULL
这与 SQL 标准关键字 DISTINCT 相同。
SELECT * FROM somewhere WHERE `address1` is not distinct from `address2`