题干:某网站包含两个表,Customers 表和 Orders 表。编写一个 SQL 查询,找出所有从不订购任何东西的客户。
Customers 表:
Id | Name |
---|---|
1 | Joe |
2 | Henry |
3 | Sam |
4 | Max |
Orders 表:
Id | CustomerId |
---|---|
1 | 3 |
2 | 1 |
例如给定上述表格,你的查询应返回:
Customers |
---|
Henry |
Max |
分析:
- 这个题目的话,就是简单的逻辑问题,左边的表为主,利用双表连接的方法,然后再把为空的筛选出来就可以了
- 第二种方法是用not in 也就是官方的解答,但是貌似时间会过长
题解:
第一种方法(左连接):时长393ms
select a.name as customers from customers a left join orders b on a.id=b.customerid where b.customerid is null;
第二种方法(not in):时长1472ms
select customers.name as 'Customers'
from customers
where customers.id not in
(
select customerid from orders
);
理解上都没什么困难的。