今天在写Leecode面试题时,遇到一道有意思题!
题目:
表: Customer
+-------------+---------+ | Column Name | Type | +-------------+---------+ | id | int | | name | varchar | | referee_id | int | +-------------+---------+ 在 SQL 中,id 是该表的主键列。 该表的每一行表示一个客户的 id、姓名以及推荐他们的客户的 id。
找出那些 没有被 id = 2
的客户 推荐 的客户的姓名。
以 任意顺序 返回结果表。
结果格式如下所示。
示例 1:
输入: Customer 表: +----+------+------------+ | id | name | referee_id | +----+------+------------+ | 1 | Will | null | | 2 | Jane | null | | 3 | Alex | 2 | | 4 | Bill | null | | 5 | Zack | 1 | | 6 | Mark | 2 | +----+------+------------+ 输出: +------+ | name | +------+ | Will | | Jane | | Bill | | Zack | +------+
这是一道很简单的小题,不过我却踩坑了!!!
原因很简单,在我的影响里"="是包括了null的,所以我的判断条件只是"!=2"
这是我的语句: select name from Customer where referee_id != 2;
很显然答案是错误的!!!
在SQL语法中:
1.= 或 != 只能判断基本数据类型
2.is 关键字只能判断是否为null
3.<=> 既能判断null 又能判断 基本数据类型,但是<=>只能代替is,并不能代替is not
另外<>与!=zuo作用相等,<=>与=作用相等,但是"<>""<=>"只适用于mysql,而"=""!="可以适用于其他数据库。
所以正确的写法应该是:
select name from Customer where referee_id <=> 2 or referee_id is null;