Open techiall opened 3 years ago
<=>
在 MySQL 中,NULL 和 NULL 是没法做比较的,也就是 NULL = NULL 的返回值是 NULL。
MariaDB [mybatis]> SELECT NULL = NULL; +-------------+ | NULL = NULL | +-------------+ | NULL | +-------------+ MariaDB [mybatis]> SELECT NULL != NULL; +--------------+ | NULL != NULL | +--------------+ | NULL | +--------------+
> / >= / < / <= / = / != / <> 都是如上同理。要判断是不是 NULL,可以使用 IS NULL / IS NOT NULL 进行判断。
> / >= / < / <= / = / != / <>
IS NULL
IS NOT NULL
MariaDB [mybatis]> SELECT NULL IS NULL; +--------------+ | NULL IS NULL | +--------------+ | 1 | +--------------+ MariaDB [mybatis]> SELECT NULL IS NOT NULL; +------------------+ | NULL IS NOT NULL | +------------------+ | 0 | +------------------+
这样子的结果是对的,但是还存在一种情况,我们不知道要比较的值是不是 NULL,这时候就需要 <=>。
MariaDB [mybatis]> SELECT NULL <=> NULL; +---------------+ | NULL <=> NULL | +---------------+ | 1 | +---------------+ MariaDB [mybatis]> SELECT 1 <=> NULL; +------------+ | 1 <=> NULL | +------------+ | 0 | +------------+ MariaDB [mybatis]> SELECT !(1 <=> NULL); +---------------+ | !(1 <=> NULL) | +---------------+ | 1 | +---------------+ MariaDB [mybatis]> SELECT !(NULL <=> NULL); +------------------+ | !(NULL <=> NULL) | +------------------+ | 0 | +------------------+
有时候需要在 WHERE 里面写 name = ${name} AND type = 1,你想要查询 name 这个字段为 NULL 的记录并且 type 等于 1,但是发现不管怎么查询都是 Empty set。
WHERE
name = ${name} AND type = 1
如果换成 name <=> ${name} AND type = 1
name <=> ${name} AND type = 1
这样子 name 的值传入 NULL,也可以查询,也就是查询 name 为 NULL(相当于 name IS NULL) 并且 type 等于 1 的记录。
name 传入的值非 NULL,例如 AAA,也就会查询 name 等于 AAA 并且 type 等于 1 的记录。
当然了,你也可以在程序里面判断 name 是不是 NULL,如果是 NULL 的话使用 name IS NULL AND type = 1 进行查询。 不是 NULL,就使用 name = ${name} AND type =1 进行查询。
当然了,你也可以在程序里面判断 name 是不是 NULL,如果是 NULL 的话使用 name IS NULL AND type = 1 进行查询。
不是 NULL,就使用 name = ${name} AND type =1 进行查询。
MySQL 运算符
<=>
运算符有区别MySQL 比较
在 MySQL 中,NULL 和 NULL 是没法做比较的,也就是 NULL = NULL 的返回值是 NULL。
> / >= / < / <= / = / != / <>
都是如上同理。要判断是不是 NULL,可以使用IS NULL
/IS NOT NULL
进行判断。这样子的结果是对的,但是还存在一种情况,我们不知道要比较的值是不是 NULL,这时候就需要
<=>
。有时候需要在
WHERE
里面写name = ${name} AND type = 1
,你想要查询 name 这个字段为 NULL 的记录并且 type 等于 1,但是发现不管怎么查询都是 Empty set。如果换成
name <=> ${name} AND type = 1
这样子 name 的值传入 NULL,也可以查询,也就是查询 name 为 NULL(相当于 name IS NULL) 并且 type 等于 1 的记录。
name 传入的值非 NULL,例如 AAA,也就会查询 name 等于 AAA 并且 type 等于 1 的记录。
参考文献