题目

某网站包含两个表,Customers 表和 Orders 表。编写一个 SQL 查询,找出所有从不订购任何东西的客户。

Customers 表:

1
2
3
4
5
6
7
8
+----+-------+
| Id | Name |
+----+-------+
| 1 | Joe |
| 2 | Henry |
| 3 | Sam |
| 4 | Max |
+----+-------+

Orders 表:

1
2
3
4
5
6
+----+------------+
| Id | CustomerId |
+----+------------+
| 1 | 3 |
| 2 | 1 |
+----+------------+

例如给定上述表格,你的查询应返回:

1
2
3
4
5
6
+-----------+
| Customers |
+-----------+
| Henry |
| Max |
+-----------+

题解

思路

  • 将两张表join一下
  • 找到join后顾客没有购物的

代码

1
2
3
4
select A.Name as Customers
from Customers A left join Orders B
on A.Id = B.CustomerId
where B.Id is null
  • Customer A 的意思就是给Customer起个别名叫A,方便后面写代码方便,Orders B 同理
  • left join 是左连接,意思是左边的全保留,如果左边的和右边的不符合on的条件,那么左边对应右边的列自动为null
  • 效率比官方题解高很多