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

2019年11月14日sql

目录 从不订购的客户code

题目:blog

解题1leetcode

解题2io

解题3class

思路拓展select

思路拓展2sql语句


题目:

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里的数据。im

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

 

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