개발은 처음이라 개발새발
Left Join 퀴즈 풀어보기 [LeetCode] 본문
https://leetcode.com/problems/customers-who-never-order/description/
오늘은 JOIN 함수 두번째 퀴즈이자 LEFT JOIN에 대해 풀어보겠습니다. 사실 현업에서는 그냥 JOIN은 많이 사용하지만 LEFT, OUTER, INNER는 잘 사용하지 않는데요. 그럼에도 JOIN을 이해하는데 알아두면 좋으니 한번 풀어보겠습니다.
Input:
Customers table:
+----+-------+
| id | name |
+----+-------+
| 1 | Joe |
| 2 | Henry |
| 3 | Sam |
| 4 | Max |
+----+-------+
Orders table:
+----+------------+
| id | customerId |
+----+------------+
| 1 | 3 |
| 2 | 1 |
+----+------------+
Output:
+-----------+
| Customers |
+-----------+
| Henry |
| Max |
+-----------+
문제를 보면 CUSTOMERS라는 테이블과 ORDERS라는 두개의 테이블이 있는데요. 둘을 보게 되면 customerId가 3, 4인 Sam, JOE는 주문을할 이력이 보입니다. 반면 결과는 주문을 한번도 안한 Henry와 Max를 표출하는 것이 퀴즈입니다. 그러면 우선 그냥 JOIN으로 코드를 실행해보겠습니다.
select *
from Customers
join Orders
on Customers.id = Orders.customerId
____________________________________________________________________________
output:
| id | name | id | customerId |
| 1 | Joe | 2 | 1 |
| 3 | Sam | 1 | 3 |
결과물을 보면 그냥 join을 하니 Customers 테이블을 기준으로 조회했기 때문에 id와 customerId가 모두 있는 즉, 주문이력이 있는 Sam, Joe만 결과가 나왔습니다. 이렇게 결과가 나오게 된 이유는 그냥 join을 쓸 경우 inner join이 기본이기 때문에 두 테이블의 교집합이 나옵니다. 하지만 우리는 Orders의 Null값이 필요하기 때문에 교집합이 아니라 합집의 결과가 필요하기 때문에 OUTER JOIN이 기본인 LEFT JOIN을 활용해야 합니다. 이번에는 LEFT JOIN을 활용한 결과를 표출해보겠습니다.
select *
from Customers
left join Orders
on Customers.id = Orders.customerId
_____________________________________________________________________________
output:
| id | name | id | customerId |
| 1 | Joe | 2 | 1 |
| 2 | Henry | null | null |
| 3 | Sam | 1 | 3 |
| 4 | Max | null | null |
네 이렇게 customerId가 null인 값도 도출했습니다. 이제 거의 정답에 근접했는데요. 답은 customerId가 null인 name만 도출하면됩니다. 결과를 보겠습니다.
select (Customers.name) as Customers
from Customers
left join Orders
on Customers.id = Orders.customerId
where Orders.customerId is null
___________________________________
output:
| Customers |
| Henry |
| Max |
'mysql' 카테고리의 다른 글
MySQL DATE_ADD & Self Join 퀴즈2 [LeetCode] (0) | 2023.05.09 |
---|---|
Self Join 퀴즈 풀어보기 [LeetCode] (0) | 2023.05.07 |
JOIN을 이용해 대륙별 평균 도시의 인구수를 구하라 [해커랭크] (0) | 2023.05.01 |
My SQL CASE문 퀴즈풀기-2 (0) | 2023.04.30 |
My SQL CASE문 삼각형 종류 퀴즈로 연습하기[해커랭크] (1) | 2023.04.30 |