RIGHT JOIN
도 이전에 배운 INNER JOIN
과 LEFT JOIN
과 마찬가지로 SELECT
문의 optional 절이다.
단지 LEFT JOIN
과 차이가 있다면, RIGHT JOIN
은 오른쪽 테이블에 있는 모든 행들을 리턴하고, 왼쪽 테이블에 있는 매칭되는 행들을 리턴 한다는 점이다.
문법은 다음과 같다.
SELECT COLUMN_LIST
FROM X RIGHT JOIN Y ON X.ID = Y.ID;
RIGHT JOIN 말고도 RIGHT OUTER JOIN으로 표현해도 된다. 여기서는 표기의 편리함을 위해 RIGHT JOIN으로 표시하고자 한다.
SELECT COLUMN_LIST
FROM X RIGHT OUTER JOIN Y ON X.ID = Y.ID;
두 테이블 X
와 Y
가 있다고 하자. 그리고 RIGHT JOIN
을 이용해서 두 테이블에 있는 행들을 하나로 병합할려고 한다.
위와 같이 X
테이블에는 2개의 컬럼인 id
(키)와 x
가 있다고 하자. 그리고 Y
테이블에는 id
(키)와 y
가 있다고 하자.
RIGHT JOIN을 통해서 오른쪽 테이블인 Y
테이블에 있는 모든 행들과 왼쪽 테이블 Y
에서 매칭되는 행들을 반환한다. 만약, 오른쪽 테이블의 행이 왼쪽 테이블 X
에 있는 행과 매칭되는게 없다면, 왼쪽 테이블 X
의 컬럼들에 대해 NULL
값을 사용한다.
정말 말 그대로 LEFT JOIN의 반대라고 생각하면 된다. 그리고 이를 벤 다이어그램으로 표현하면 테이블 Y 전체를 표현하는 것과 같다. 모습은 아래와 같다.
지난 번과 마찬가지로 ORDER
테이블과 EMPLOYEES
테이블을 사용할 것이다. 각 테이블들의 연관관계는 다음과 같다.
판매 사원이 최소 1개에서 많게는 여러 개의 판매 주문을 담당할 수 있다는 것을 가정해보자. 하지만, 몇몇 주문들은 판매 사원의 담당이 아닐 수가 있다.
이를 쿼리로 표현하면 다음과 같다.
SELECT FIRST_NAME, LAST_NAME, ORDER_ID, STATUS
FROM ORDERS RIGHT JOIN EMPLOYEES ON EMPLOYEE_ID = SALESMAN_ID
WHERE JOB_TITLE = 'Sales Representative'
ORDER BY FIRST_NAME, LAST_NAME;
해당 쿼리를 실행하면 결과는 다음과 같이 나온다.
여기서 주목해야 될 점은, 단 하나의 판매 주문을 담당하지 않는 판매 사원에 대해서는 ORDER_ID
와 STATUS
컬럼들에 대해 NULL
값을 채운다는 것이다.
USING
절을 이용한 RIGHT OUTER JOIN 표현USING
절을 이용해서 INNER JOIN, LEFT JOIN을 배웠을 때와 마찬가지로 RIGHT OUTER JOIN
을 표현할 수 있다. 문법은 다음과 같고 아래 쿼리를 실행하면 다음과 같다.
SELECT COLUMN_LIST
FROM X RIGHT JOIN Y USING(ID);
고객이 판매 주문 정보를 가지지 않는다면, ORDER_ID
와 STATUS
칼럼이 NULL
값으로 채워져 있는 것을 알 수 있다.
즉, RIGHT JOIN
을 사용해서 오른쪽 테이블에 있는 모든 행들과 왼쪽 테이블에 이와 매칭되는 행들을 포함시킬 수 있다.