Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情。
一、题目描述:
题目来源:LeetCode>从不订购的客户
某网站包含两个表,Customers 表和 Orders 表。编写一个 SQL 查询,找出所有从不订购任何东西的客户。
Customers 表:
| Id | Name |
|---|---|
| 1 | Joe |
| 2 | Henry |
| 3 | Sam |
| 4 | Max |
Orders 表:
| Id | CustomerId |
|---|---|
| 1 | 3 |
| 2 | 1 |
例如给定上述表格,你的查询应返回:
| Customers |
|---|
| Henry |
| Max |
二、思路分析:
- 首先处理这类问题,第一反应肯定是使用表关联解决,两表有个直接关联的字段CustomerId
- 其次,要找出不订购的顾客,那么可以在关联之后进行一个WHERE条件筛选
- 综上,需要使用到的关键字包括:LEFT JOIN、ON、WHERE
三、AC 代码:
SELECT NAME AS
Customers
FROM
customers
LEFT JOIN orders ON id = customerId
WHERE
customerId IS NULL;
四、总结:
此题主要是对于LEFT JOIN的使用,当然,也可以不使用LEFT JOIN,直接进行关联匹配,但是过程和代码都会麻烦很多,需要首先检索出有订单的顾客,再作为临时表,对Customers进行关联查询。
JOIN的解释说明:
LEFT JOIN:左连接,意思是左边的全保留,如果左边的和右边的不符合on的条件,那么左边对应右边的列自动为null。
INNER JOIN:内连接,获取两个表中字段匹配关系的记录;
RIGHT JOIN:右连接,与 LEFT JOIN相反,用于获取右表中的所有记录,即使左表没有对应匹配的记录。