【SQL刷題系列】:leetcode183 Customers Who Never Order

(點擊上方藍色,快速關注)

SQL刷題系列:SQL作爲一種數據庫查詢和程序設計語言,是從事數據技術人員必備的技能,也是各大公司的數據分析、數據挖掘、數據庫等筆試題必考的一種題。所以,不論大家是轉行還是學習都少不了這一關。爲此,Python數據科學開啓了SQL刷題的系列,希望可以幫助有需要的朋友們。 題目來源:本篇內容爲Leetcode上SQL題庫183 難易程度:簡單

▌刷題回顧

【SQL刷題系列】:leetcode178 Rank Scores

▌題目描述

Suppose that a website contains two tables, the Customers table and the Orders table. Write a SQL query to find all customers who never order anything.

假設一個網站包含兩個表: Customers和Orders。寫出一個SQL查詢語句找出所有沒有任何訂單的顧客。

Customers表:

+----+-------+
| Id | Name  |
+----+-------+
| 1  | Joe   |
| 2  | Henry |
| 3  | Sam   |
| 4  | Max   |
+----+-------+

Orders表:

+----+------------+
| Id | CustomerId |
+----+------------+
| 1  | 3          |
| 2  | 1          |
+----+------------+

使用上面兩個表,你的查詢結果應該與下面這樣相同。

+-----------+
| Customers |
+-----------+
| Henry     |
| Max       |
+-----------+

▌參考答案

參考1:

select Name as Customers from Customers
where Id not in (select distinct CustomerId from Orders);

參考2:

select name AS Customers
from Customers LEFT JOIN Orders 
ON Customers.Id=Orders.CustomerId 
WHERE Orders.CustomerId IS NULL;

▌答案解析

參考1:通過查詢select的嵌套使用。先在Orders表中返回所有有訂單的客戶Id,然後在Customer查詢不在Orders表中的客戶Id,最後返回相應的用戶名字,即爲最終結果。當然,也可以使用join通過連接兩個表來實現

參考2:將Customers表的Id與Orders表的CustomerId建立左連接,那麼Orders原本缺少的信息就會自動用NULL來代替。然後用where查詢是NULL的用戶名字即可。

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