以一个例题说明MYSQL的三值逻辑及数值比较
例题
表: Customer
+-------------+---------+ | Column Name | Type | +-------------+---------+ | id | int | | name | varchar | | referee_id | int | +-------------+---------+ 在 SQL 中,id 是该表的主键列。 该表的每一行表示一个客户的 id、姓名以及推荐他们的客户的 id。
找出那些 没有被 id = 2
的客户 推荐 的客户的姓名。
以 任意顺序 返回结果表。
解法及说明
解法1
SELECT `name`
FROM `Customer`
WHERE `referee_id` IS NULL or `referee_id` != 2
最常规的做法,其中 != 也可写作<>
解法2
SELECT `name`
FROM `Customer`
WHERE NOT `referee_id` <=> 2
采用运算符安全的等于<=>,可以对NULL进行判断,其含义是,只有左右两侧都为NULL的时候才返回1。
此运算符可用作条件判断中,可判断存在NULL的情况。
总结
1.MYSQL的三值逻辑
对于其他语言来讲,逻辑值只有true和false两种,但是对于MYSQL来说,有true,false和 unknown(小写unknown作为逻辑值,大写UNKNOWN作为未知的意思)三种。
2.NULL的比较
因为NULL本身表示没有值,对其使用比较谓词并没有意义,因而不论是= NULL、> NULL、< NULL、<> NULL,其结果均为unkown.
对于表示某个变量为NULL时,要使用IS NULL而不是=NULL,同理还有IS NOT NULL,可以用于对NULL的判断。
3.MYSQL中的比较运算符
运算符 | 作用 |
---|---|
= | 等于 |
<=> | 安全的等于 |
<> 或者 != | 不等于 |
<= | 小于等于 |
>= | 大于等于 |
> | 大于 |
IS NULL 或者 ISNULL | 判断一个值是否为空 |
IS NOT NULL | 判断一个值是否不为空 |
BETWEEN AND | 判断一个值是否落在两个值之间 |