0
点赞
收藏
分享

微信扫一扫

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


2019年11月14日

目录 从不订购的客户

​​题目:​​

​​解题1​​

​​解题2​​

​​解题3​​

​​思路拓展​​

​​思路拓展2​​

题目:

LeetCode刷题之旅【数据库篇】简单 - 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);

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

 

解题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;

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

 

解题3

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

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

 

思路拓展

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

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

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

 

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

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/
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

 

思路拓展2

  • select 1 就是select * 么?

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

 

 

举报

相关推荐

0 条评论