某网站包含两个表,Customers
表和 Orders
表。编写一个 SQL 查询,找出所有从不订购任何东西的客户。
Customers
表:
+----+-------+ | Id | Name | +----+-------+ | 1 | Joe | | 2 | Henry | | 3 | Sam | | 4 | Max | +----+-------+
Orders
表:
+----+------------+ | Id | CustomerId | +----+------------+ | 1 | 3 | | 2 | 1 | +----+------------+
例如给定上述表格,你的查询应返回:
+-----------+ | Customers | +-----------+ | Henry | | Max | +-----------+
方法一:
列举所有已存在订单的客户 ID,使用 NOT IN
找到不存在其中的客户。
方法二:
使用 LEFT JOIN
连接表格,返回 CustomerId
为 NULL
的数据。
select Name as Customers
from Customers
where id not in (
select CustomerId
from Orders
);
SELECT
c.Name AS Customers
FROM
customers AS c
LEFT JOIN orders AS o ON c.Id = o.CustomerId
WHERE
o.CustomerId IS NULL;