> 文章列表 > 力扣-从不订购的客户

力扣-从不订购的客户

力扣-从不订购的客户

大家好,我是空空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的。