제27장 RIGHT JOIN
"그런데 오른쪽 테이블을 기준으로 보고 싶다면?"
학습 목표
이번 장을 학습하면 다음 내용을 할 수 있습니다.
- RIGHT JOIN의 의미를 이해할 수 있다.
- LEFT JOIN과 RIGHT JOIN의 차이를 설명할 수 있다.
- RIGHT JOIN을 LEFT JOIN으로 바꾸어 작성할 수 있다.
- 실제 업무에서 RIGHT JOIN이 잘 사용되지 않는 이유를 이해할 수 있다.
지난 장을 떠올려 봅시다.
LEFT JOIN에서는
Customers
↓
Orders
를 연결했습니다.
모든 고객은 출력되고,
주문이 없는 고객은 NULL이 나타났습니다.
그렇다면 이번에는 반대로 생각해 보겠습니다.
이런 질문을 받아 봅시다.
회사에서
"주문 정보를 모두 확인하고 싶습니다."
라고 요청했습니다.
이때 기준이 되는 것은
Customers가 아니라
Orders일 수도 있습니다.
이럴 때 사용할 수 있는 것이
RIGHT JOIN입니다.
RIGHT JOIN의 의미
RIGHT JOIN은
오른쪽 테이블의 모든 데이터를 먼저 가져온 후, 왼쪽 테이블에 연결되는 데이터가 있으면 붙여 준다.
즉,
FROM Customers
RIGHT JOIN Orders
라면
Orders의 모든 행이 반드시 출력됩니다.
실행 결과 먼저 보기
| 고객명 | 주문번호 |
| Alfreds Futterkiste | 10248 |
| Around the Horn | 10249 |
| NULL | 11080 |
마지막 주문은
고객 정보가 연결되지 않은 경우입니다.
그래서 고객 이름은 NULL이 됩니다.
(※ 실제 W3Schools 데이터에서는 외래키가 유지되므로 이런 상황은 거의 발생하지 않습니다. 이해를 돕기 위한 예시입니다.)
예제 1. RIGHT JOIN 사용하기
SELECT Customers.CustomerName,
Orders.OrderID
FROM Customers
RIGHT JOIN Orders
ON Customers.CustomerID = Orders.CustomerID;
SQL를 한 줄씩 살펴보기
FROM Customers
Customers 테이블을 사용합니다.
RIGHT JOIN Orders
Orders를 기준으로 결과를 만듭니다.
즉,
주문 정보는 모두 출력됩니다.
ON Customers.CustomerID = Orders.CustomerID;
고객 번호가 같은 데이터를 연결합니다.
LEFT JOIN과 비교하기
LEFT JOIN
Customers
○ 김철수
○ 이영희
○ 박민수
↓
Orders
○ 김철수
○ 박민수
↓
결과
김철수
이영희
박민수
RIGHT JOIN
Customers
○ 김철수
○ 박민수
↓
Orders
○ 주문1
○ 주문2
○ 주문3
↓
결과
주문1
주문2
주문3
기준이 되는 테이블이 달라졌습니다.
그런데 이상하지 않나요?
조금 생각해 봅시다.
다음 SQL을 보겠습니다.
SELECT Customers.CustomerName,
Orders.OrderID
FROM Customers
RIGHT JOIN Orders
ON Customers.CustomerID = Orders.CustomerID;
테이블의 위치를 바꾸면 어떻게 될까요?
SELECT Customers.CustomerName,
Orders.OrderID
FROM Orders
LEFT JOIN Customers
ON Orders.CustomerID = Customers.CustomerID;
놀랍게도
두 SQL은 같은 결과를 만듭니다.
왜 그럴까요?
RIGHT JOIN은
오른쪽을 모두 가져옵니다.
하지만
테이블 순서를 바꾸면
오른쪽이 왼쪽이 됩니다.
그래서
RIGHT JOIN은
LEFT JOIN으로 바꾸어 작성할 수 있습니다.
실제 업무에서는?
많은 개발자는
RIGHT JOIN을 거의 사용하지 않습니다.
대신
LEFT JOIN으로 바꾸어 작성합니다.
왜냐하면
SQL을 위에서 아래로 읽을 때
기준이 되는 테이블을 항상 왼쪽에 두는 것이
이해하기 쉽기 때문입니다.
예를 들어
다음 두 SQL이 있다고 합시다.
FROM Customers
RIGHT JOIN Orders
그리고
FROM Orders
LEFT JOIN Customers
대부분의 개발자는
두 번째를 더 많이 사용합니다.
읽기도 쉽고,
복잡한 JOIN에서도
기준이 명확하기 때문입니다.
실무에서는 어떻게 할까요?
예를 들어
배송 목록을 만드는 프로그램이라면
배송 대상이 기준입니다.
따라서
Orders
↓
Customers
처럼 생각하는 것이 자연스럽습니다.
그래서
LEFT JOIN으로 작성하는 경우가 훨씬 많습니다.
많이 하는 실수
실수 ①
RIGHT JOIN을 반드시 외워야 한다고 생각한다.
사실은
LEFT JOIN으로 대부분 바꿀 수 있습니다.
실수 ②
기준 테이블을 생각하지 않는다.
JOIN에서 가장 중요한 것은
어느 테이블을 기준으로 결과를 만들 것인가?
입니다.
실수 ③
LEFT JOIN과 RIGHT JOIN을
반대 방향이라고만 외운다.
방향보다 중요한 것은
결과에 반드시 남아야 하는 테이블이 무엇인가입니다.
한눈에 정리
| JOIN | 반드시 남는 테이블 |
| INNER JOIN | 공통 데이터 |
| LEFT JOIN | 왼쪽 테이블 |
| RIGHT JOIN | 오른쪽 테이블 |
이번 장 핵심 정리
✅ RIGHT JOIN은 오른쪽 테이블을 모두 조회한다.
✅ LEFT JOIN과 방향만 다르다.
✅ 테이블의 위치를 바꾸면 LEFT JOIN으로 표현할 수 있다.
✅ 실무에서는 LEFT JOIN을 더 많이 사용한다.
연습 문제
기본 문제
① Customers와 Orders를 RIGHT JOIN하여 고객 이름과 주문번호를 조회하시오.
② 같은 결과를 LEFT JOIN으로 다시 작성해 보시오.
응용 문제
다음 SQL을 LEFT JOIN으로 바꾸시오.
SELECT Customers.CustomerName,
Orders.OrderID
FROM Customers
RIGHT JOIN Orders
ON Customers.CustomerID = Orders.CustomerID;
도전 문제
다음 두 SQL의 실행 결과가 같은지 직접 실행하여 확인해 보시오.
SELECT Customers.CustomerName,
Orders.OrderID
FROM Customers
RIGHT JOIN Orders
ON Customers.CustomerID = Orders.CustomerID;
SELECT Customers.CustomerName,
Orders.OrderID
FROM Orders
LEFT JOIN Customers
ON Orders.CustomerID = Customers.CustomerID;
정답
기본 문제
SELECT Customers.CustomerName,
Orders.OrderID
FROM Customers
RIGHT JOIN Orders
ON Customers.CustomerID = Orders.CustomerID;
응용 문제
SELECT Customers.CustomerName,
Orders.OrderID
FROM Orders
LEFT JOIN Customers
ON Orders.CustomerID = Customers.CustomerID;
'프로그래밍 > MySQL' 카테고리의 다른 글
| 📊 [SQL 프로젝트] 제26장 LEFT JOIN - 주문하지 않은 고객도 보고 싶습니다. (0) | 2026.07.07 |
|---|---|
| 📊 [SQL 프로젝트] 제25장 여러 테이블 JOIN하기 - 고객이 주문한 상품은 무엇일까? (0) | 2026.07.07 |
| 📊 [SQL 프로젝트] 제24장 관계를 따라 JOIN하기 - 데이터베이스 지도를 읽는 방법 (0) | 2026.07.06 |
| 📊 [SQL 프로젝트] 제23장 INNER JOIN - 두 테이블을 연결해 봅시다. (0) | 2026.07.06 |
| 📊 [SQL 프로젝트] 제22장 왜 JOIN이 필요할까요? - 여러 테이블을 연결하는 이유 (0) | 2026.07.06 |