大家好,我是空空star,本篇带大家了解一道简单的力扣sql练习题。
文章目录
- 前言
- 一、题目:183. 从不订购的客户
- 二、解题
- 1.正确示范①
- 提交SQL
- 运行结果
- 2.正确示范②
- 提交SQL
- 运行结果
- 3.正确示范③
- 提交SQL
- 运行结果
- 4.正确示范④
- 提交SQL
- 运行结果
- 总结
前言
一、题目:183. 从不订购的客户
某网站包含两个表,Customers 表和 Orders 表。编写一个 SQL 查询,找出所有从不订购任何东西的客户。
Customers 表:
+----+-------+
| Id | Name |
+----+-------+
| 1 | Joe |
| 2 | Henry |
| 3 | Sam |
| 4 | Max |
+----+-------+
Orders 表:
+----+------------+
| Id | CustomerId |
+----+------------+
| 1 | 3 |
| 2 | 1 |
+----+------------+
例如给定上述表格,你的查询应返回:
+-----------+
| Customers |
+-----------+
| Henry |
| Max |
+-----------+
二、解题
1.正确示范①
提交SQL
select Name Customers
from Customers
where id not in(
select CustomerId from Orders
)
运行结果
2.正确示范②
提交SQL
select Name Customers
from Customers u1
left join Orders u2
on u1.id=u2.CustomerId
where u2.CustomerId is null
运行结果
3.正确示范③
提交SQL
select Name Customers
from Orders u1
right join Customers u2
on u2.id=u1.CustomerId
where u1.CustomerId is null
运行结果
4.正确示范④
提交SQL
select Name Customers
from Customers u1
left join Orders u2
on u1.id=u2.CustomerId
group by u1.id,Name
having count(CustomerId)=0
运行结果
总结
正确示范①思路:
使用 not in 查询不在客户订单列表中的客户;
正确示范②思路:
使用 left join 将客户和订单表关联起来,最后用where限定关联后的u2的CustomerId是null;
正确示范③思路:
使用 right join 将客户和订单表关联起来,最后用where限定关联后的u2的CustomerId是null;
正确示范④ 思路:
使用 group by xx having 语句,取count(CustomerId)=0的。