LeetCode刷题之旅【数据库篇】简单 - 2:从不订购的客户

本文详细解析了三种SQL查询技巧,用于找出从未下单的客户。通过对比NOT EXISTS、LEFT JOIN及NOT IN的方法,深入探讨了如何高效地从数据库中筛选特定数据。同时,文章还延伸讨论了SQL查询中SELECT 1与SELECT *的区别。

2019年11月14日

目录 从不订购的客户

题目:

解题1

解题2

解题3

思路拓展

思路拓展2


题目:

CREATE TABLE Customers (
	Id INT NOT null ,
	Name VARCHAR(128) DEFAULT '',
PRIMARY KEY (Id)
) ENGINE = INNODB DEFAULT CHARSET=utf8mb4;
CREATE TABLE Orders  (
	Id INT NOT null ,
	CustomerId LONG NOT null ,
PRIMARY KEY (Id)
) ENGINE = INNODB DEFAULT CHARSET=utf8mb4;

 

解题1

-- not exists
SELECT NAME Customers FROM customers 
WHERE NOT EXISTS (SELECT 1 FROM orders WHERE orders.CustomerId = customers.Id);

 

解题2

-- left join
select A.Name as Customers
from Customers A left join Orders B
on A.Id = B.CustomerId
where B.Id is null;

 

解题3

select customers.name as 'Customers'
from customers
where customers.id not in
(
    select customerid from orders
);

 

思路拓展

6.jpg

其中上图黑色框里的sql解决的问题是:不在表里的数据,也就是在表A里的数据,但是不在表B里的数据。

对于这个题目“不是近视眼的学生都有谁?”,就是在“学生表”里的数据,但是不在“近视学生”表里的数据。我们选择下图黑色框里的左联结sql语句。

 

7.jpg

select ...
from 表1 as a
left join 表2 as b
on a.列名=b.列名
where b.列名 is null;
​

作者:houziAI
链接:https://leetcode-cn.com/problems/customers-who-never-order/solution/tu-jie-sqlmian-shi-ti-cha-zhao-bu-zai-biao-li-de-s/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

 

思路拓展2

  • select 1 就是select * 么?

select * 会返回所有的字段,而select 1 存在记录的话会返回数字1

 

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

后台技术汇

对你的帮助,是对我的最好鼓励。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值