持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第19天,点击查看活动详情
一、问题描述
给定表 customer ,里面保存了所有客户信息和他们的推荐人。
+------+------+-----------+
| id | name | referee_id|
+------+------+-----------+
| 1 | Will | NULL |
| 2 | Jane | NULL |
| 3 | Alex | 2 |
| 4 | Bill | NULL |
| 5 | Zack | 1 |
| 6 | Mark | 2 |
+------+------+-----------+
写一个查询语句,返回一个客户列表,列表中客户的推荐人的编号都 不是 2。
对于上面的示例数据,结果为:
题目链接:用户推荐人
二、题目要求
样例
+------+
| name |
+------+
| Will |
| Jane |
| Bill |
| Zack |
+------+
考察
1.条件语句
2.建议用时10~25min
三、问题分析
这一题就是一道普通的条件查询,但是要注意一点。我一开始直接使用下面的代码,
select name
from customer
where referee_id!=2
结果查询之后的结果是只有Zack这个名字,对于referee_id为null但是也满足题目条件的结果无法判断,因为 = 或 != 只能判断基本数据类型,带null的列无法与值做比较。
所以,如果我们任然要使用这种方法时,需要在where语句的后面加一个referee_id is null,这样的话就可以判断结果。
这里涉及到一个小小的知识点,为什么判断是否为空是is null而不是=null呢?
很奇怪,是不是?小学的时候学的=就是表示相等关系。
但是null表示不确定的值,本身它不与任何值相等(包括其本身)。
is null 判断某个字符是否为空,并不代表空字符或者是0
等于null是判断某个值是否等于null,所以不能使用=,只能使用is null或者is not null来判断。
四、编码实现
select name
from customer
where referee_id!=2 or referee_id is null