요약
- 외부 조인은 기준에 따라 왼쪽 혹은 오른쪽 데이터를 모두 선택한다.
- 문법은 LEFT OUTER JOIN 처럼 선택할 방향 + OUTER JOIN 이지만, OUTER 를 빼고 LEFT JOIN 처럼 쓸수도 있어서 보통은 OUTER 는 빼고 쓴다.
- 내부 조인과는 다르게 한쪽의 데이터를 모두 선택하기 때문에 FROM 절에 쓰이는 기준 테이블이 매우 중요하다.
- 추가로 FULL OUTER JOIN 이라고 왼쪽, 오른쪽 모두 선택하는 JOIN도 있긴 하지만 MySQL에서는 지원하지도 않고 성능적으로도 안좋기 때문에 보통 사용하지는 않는다.
LEFT OUTER JOIN
- 두 테이블이 있을 때, 왼쪽 테이블의 데이터는 모두 선택하는 조인이다.
- 여기서 왼쪽은 FROM 절에 명시한 테이블이 된다.
- 그래서 만약 FROM users LEFT JOIN orders 라고 한다면
- 유저 데이터는 모두 선택하고, 만약 연결되는 orders 데이터가 없다면 orders 테이블에 있는 컬럼들은 NULL로 채워진다.
- 예를 들어 (u.name, o.order_date) FROM users u ON orders o 라면, 주문 데이터가 없는 유저는 order_date 이 NULL 이 된다.
SELECT
u.name as user_name,
o.order_id,
o.order_date
FROM
users u
LEFT JOIN
orders o ON u.user_id = o.user_id
WHERE
o.order_id IS NULL;
-- 이런식으로 외부 조인을 응용하면 주문 데이터가 없는 유저만 가져올수도 있다.
RIGHT OUTER JOIN
- LEFT 조인과 반대 개념이다.
- 예를 들어, 위쪽 예시를 RIGHT 조인으로 쓰면 아래와 같다.
SELECT
u.name as user_name,
o.order_id,
o.order_date
FROM
orders o
RIGHT JOIN
users u ON o.user_id = u.user_id
WHERE
o.order_id IS NULL;
- 이렇게 1대1로 변환이 가능하기 때문에 보통은 LEFT 조인을 선호하는 경우가 많다.
- 이유는 보통 글도 왼쪽부터 오른쪽으로 읽듯이 기준을 왼쪽에 두면 조금 더 직관적으로 보이기 때문이다.
Outer Join 주의사항
- 외부 조인은 기준 테이블을 어떤 것으로 두느냐에 따라 결과가 달라질 수 있다.