문제
💡 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의 방식으로도 해결할 수 있을 것으로 보인다
'SQL > 코딩테스트' 카테고리의 다른 글
[프로그래머스 / MySQL] 동물의 아이디와 이름 (0) | 2024.01.30 |
---|---|
[leetcode / MySQL] 181. Employees Earning More Than Their Managers (0) | 2024.01.29 |
[leetcode / MySQL] 1179. Reformat Department Table (4) | 2024.01.29 |
[프로그래머스 / MySQL] 즐겨찾기가 가장 많은 식당 정보 출력하기 (0) | 2024.01.29 |
[프로그래머스 / MySQL] 중복 제거하기 (0) | 2024.01.29 |