LeetCode刷題之旅【數據庫篇】簡單 - 2:從不訂購的客戶

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

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章