astak16 / blog-mysql

LeetCode 数据库刷题

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

18 从不订购的客户

astak16 opened this issue · comments

题目

找出所有从不订购任何东西的客户

create table customers (
	id int primary key auto_increment,
	name varchar(255)
);
insert into customers (name) values('Joe'), ('Henry'), ('Sam'), ('Max');

create table orders (
	id int primary key auto_increment,
	customerId int
);
insert into orders (customerId) values(3),(1);

SQL:方法一

select name from customers left join orders
on customers.id = orders.customerId where isnull(customerId);

解析

使用 left join 连接 customersorders 连接条件是 customers.id = orders.customersId and isnull(customersId)

SQL:方法二

select name from customers where id not in (
	select customerId from orders
);

解析

使用 not in 查出不在这些结果中的数据。

SQL:方法三

select name from customers where not exists (
	select customerId from orders where customerId = customers.id
);

解析

使用 not exists 代替 not in