먼저 정의부터 시작하자. RIGHT JOIN은 오른쪽 테이블의 모든 행을 반환하고(그래서 "오른쪽"이라고 불려), 왼쪽 테이블에서는 일치하는 행만 반환하는 join 타입이야. 만약 왼쪽 테이블에 오른쪽 테이블의 행에 해당하는 데이터가 없으면, 왼쪽 테이블의 컬럼에는 NULL 값이 들어가.
이미 LEFT JOIN을 배웠지? 거의 똑같은데, 그냥 "거울"처럼 반대야. 핵심 차이는 어떤 테이블이 기준이냐(왼쪽이냐 오른쪽이냐)야.
RIGHT JOIN 문법
RIGHT JOIN의 문법은 LEFT JOIN이랑 거의 똑같아. 구조는 이래:
SELECT
컬럼들
FROM
왼쪽_테이블 RIGHT JOIN 오른쪽_테이블
ON
조인_조건;
테이블 순서에 주의해:
- 왼쪽 테이블이
RIGHT JOIN앞에 온다; - 오른쪽 테이블은
RIGHT JOIN뒤에 온다.
예를 들어, 우리가 두 개의 테이블이 있다고 해보자:
students — 학생 목록:
| student_id | name |
|---|---|
| 1 | Otto |
| 2 | Maria |
| 3 | Alex |
enrollments — 학생들의 수강신청 기록:
| enrollment_id | course_name | student_id |
|---|---|---|
| 101 | 수학 | 1 |
| 102 | 컴퓨터과학 | 2 |
| 103 | 생물학 | NULL |
이제 모든 수강신청 기록과, 학생 정보(있으면)를 가져오고 싶어. 만약 학생이 없으면 학생 정보 대신 NULL이 나올 거야.
RIGHT JOIN을 사용한 쿼리는 이렇게 돼:
SELECT
enrollments.enrollment_id,
enrollments.course_name,
students.name AS student_name
FROM
students RIGHT JOIN enrollments
ON
students.student_id = enrollments.student_id;
결과:
| enrollment_id | course_name | student_name |
|---|---|---|
| 101 | 수학 | Otto |
| 102 | 컴퓨터과학 | Maria |
| 103 | 생물학 | NULL |
여기서 보면 enrollments(오른쪽 테이블)의 모든 행이 결과에 들어가고, students(왼쪽 테이블)에 일치하는 게 없으면 NULL이 들어가.
RIGHT JOIN과 LEFT JOIN 비교
LEFT JOIN이 어떻게 동작하는지 이미 알면, "그럼 RIGHT JOIN은 왜 필요하지? 그냥 LEFT JOIN 쓰면 안 돼?"라고 생각할 수도 있어. 좋은 질문이야! 차이점과 언제 RIGHT JOIN을 쓰는 게 좋은지 보자.
데이터 방향
LEFT JOIN: 왼쪽 테이블의 모든 행을 반환, 오른쪽에 일치하는 게 없어도 상관없음.RIGHT JOIN: 오른쪽 테이블의 모든 행을 반환, 왼쪽에 일치하는 게 없어도 상관없음.
기준 테이블 선택 보통
LEFT나RIGHT를 어떤 테이블이 더 중요하고, 쿼리를 어떤 순서로 쓰는 게 편한지에 따라 골라.동등성 모든
RIGHT JOIN은 테이블 순서만 바꿔서LEFT JOIN으로 쓸 수 있어. 예를 들어:-- RIGHT JOIN SELECT * FROM students RIGHT JOIN enrollments ON students.student_id = enrollments.student_id; -- 동등한 LEFT JOIN SELECT * FROM enrollments LEFT JOIN students ON students.student_id = enrollments.student_id;
그러니까 RIGHT JOIN이 마음에 안 들면, 안 써도 돼!
RIGHT JOIN을 언제 써야 할까?
실제로 RIGHT JOIN은 LEFT JOIN보다 덜 쓰이긴 해. 하지만 이런 경우엔 유용할 수 있어:
- 오른쪽 테이블이 더 중요할 때(예: 그게 메인 테이블일 때);
- 쿼리 순서를 논리적으로 왼쪽-오른쪽으로 쓰고 싶을 때;
- 이미
RIGHT JOIN을 쓰는 코드와 작업할 때.
RIGHT JOIN 시각적으로 보기
RIGHT JOIN을 더 잘 이해하려면, 다이어그램을 보자:
왼쪽 테이블 오른쪽 테이블
[ A ] --------> [ 1 ]
[ B ] --------> [ 2 ]
[ C ] --------> [ 3 ]
[ D ] [ 4 ]
RIGHT JOIN을 쓰면 오른쪽 테이블의 모든 값이, 왼쪽 테이블에서 일치하는 데이터와 함께 나와. 왼쪽에 없는 건 NULL로 채워져.
실전 과제
이제 네가 직접 해볼 차례야. 문제는 이거야:
네가 departments (부서)랑 employees (직원) 테이블을 가지고 있다고 하자: departments:
| department_id | department_name |
|---|---|
| 1 | IT |
| 2 | 영업 |
| 3 | 회계 |
employees:
| employee_id | name | department_id |
|---|---|---|
| 101 | Peter | 1 |
| 102 | Eva | 2 |
| 103 | Ron | NULL |
RIGHT JOIN을 써서, 모든 부서와(직원이 있으면 직원도), 직원이 없으면 NULL로 나오는 쿼리를 작성해봐.
먼저 직접 풀어보고, 답을 확인해!
과제 정답
쿼리는 이렇게 돼:
SELECT
departments.department_name,
employees.name AS employee_name
FROM employees RIGHT JOIN departments
ON employees.department_id = departments.department_id;
결과는 이렇게 나와:
| department_name | employee_name |
|---|---|
| IT | Peter |
| 영업 | Eva |
| 회계 | NULL |
RIGHT JOIN 쓸 때 흔한 실수
RIGHT JOIN을 쓰다 보면 초보자들이 이런 실수를 자주 해:
ON조인 조건을 까먹음. 조건 없이 쓰면 테이블 곱(product)이 돼서 난리 날 수 있어.RIGHT JOIN과LEFT JOIN을 헷갈림. 테이블 순서가 바뀌면 결과가 완전 달라져.NULL값을 처리 안 함.RIGHT JOIN결과엔NULL이 자주 나오니까,COALESCE()로 바꿔주거나 해석을 잘 해야 해.
여기까지야! 이제 RIGHT JOIN을 쓸 줄 알고, RIGHT JOIN과 LEFT JOIN의 차이도 알았으니, 네 상황에 맞는 조인 타입을 고를 수 있을 거야. 다음 강의에서는 FULL OUTER JOIN을 더 자세히 다룰 거야. 이건 두 테이블의 모든-모든을 합치는 거지. 쿼리 짜는 데 화이팅!
GO TO FULL VERSION