数据库每日一题---第14天:用户推荐人

166 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 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_idnull但是也满足题目条件的结果无法判断,因为 = 或 != 只能判断基本数据类型,带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

五、测试结果

1.png

2.png

19.png