본문 바로가기
SQL/코딩테스트

[leetcode / MySQL] 183. Customers Who Never Order

by Hi_heidi 2024. 1. 29.

문제

💡 Write a solution to find all customers who never order anything. Return the result table in any order.

 

테이블 형태

 

풀이

SELECT name AS Customers
FROM Customers AS C
    LEFT JOIN Orders AS O ON C.id = O.customerId
WHERE O.id IS NULL
ORDER BY C.id

 

해설

SELECT name AS Customers
FROM Customers AS C
    LEFT JOIN Orders AS O ON C.id = O.customerId
WHERE O.id IS NULL
ORDER BY C.id
  • Orders(O) 테이블에는 주문한 고객들의 customerId가 담겨있다. 즉, 주문한 적이 없으면 Customers(C) 테이블에는 있어도 O 테이블에는 없다는 것이다. 문제는 주문 내역이 없는 소비자들의 이름을 출력하는 것이다.
  • C 테이블을 기준으로 LEFT JOIN 해주어 모든 고객 내역이 보존되면서 주문 내역이 있는 고객들은 JOIN될 수 있게 하였다. 여기에 WHERE 절에 O 테이블의 id가 NULL인, 즉 주문 내역이 없어 조인된 O 테이블에 아무 값이 들어가지 않은 데이터만 필터링했다
  • FULL OUTER JOIN의 방식으로도 해결할 수 있을 것으로 보인다