(點擊上方藍色,快速關注)
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的用戶名字即可。