INNER JOIN
A와 B테이블이 있을 때 INNER JOIN은 두 테이블이 모두 가지고 있는 데이터를 검색한다.
쉽게 말해서 INNER JOIN은 교집합이다.
위와 같이 A와 B 테이블이 있다고 했을 때, 다음과 같이 Inner Join 하면
SELECT * FROM A
INNER JOIN B
ON A.id = B.id;
두 테이블 모두에 존재하는 데이터에 대한 결과를 얻을 수 있다.
OUTER JOIN
OUTER JOIN은 일종의 합집합으로 특정 테이블을 기준으로 데이터를 보여준다.
OUTER JOIN은 크게 세 종류로 나눌 수 있다.
1) LEFT OUTER JOIN
LEFT OUTER JOIN은 왼쪽 테이블을 기준으로 OUTER JOIN을 수행하는 것이다.
A와 B 테이블이 있을 때 왼쪽 테이블인 A의 모든 데이터를 가져온 후 오른쪽 테이블인 B의 데이터를 매칭한다.
매칭되는 데이터가 없는 경우 데이터를 NULL로 표시한다.
아래와 같이 LEFT OUTER JOIN을 수행하면
SELECT * FROM A
LEFT OUTER JOIN B
ON a.id = b.id;
위와 같은 결과를 얻을 수 있다.
2) RIGHT OUTER JOIN
RIGHT OUTER JOIN은 오른쪽테이블을 기준으로 OUTER JOIN을 수행하는 것이다.
A와 B 테이블이 있을 때 오른쪽 테이블인 B의 모든 데이터를 가져온 후 왼쪽 테이블인 A의 데이터를 매칭한다.
매칭되는 데이터가 없는 경우 데이터를 NULL로 표시한다.
아래와 같이 RIGHT OUTER JOIN을 수행하면
SELECT * FROM A
RIGHT OUTER JOIN B
ON a.id = b.id;
위와 같은 결과를 얻을 수 있다.
3) FULL OUTER JOIN
FULL OUTER JOIN은 LEFT, RIGHT OUTER JOIN을 합친 것으로 조건이 맞지 않는 데이터까지
모두 결합하여 출력하는 JOIN이다.
FULL OUTER JOIN 예제를 수행해보려 하니 에러가 발생했다.
서치해보니 MySQL에서는 FULL OUTER JOIN을 지원하지 않는다고 한다.
UNION 구문을 이용하여 FULL JOIN과 같은 결과를 얻을 수 있다.
(SELECT * FROM A LEFT OUTER JOIN B ON a.id = b.id)
UNION
(SELECT * FROM A RIGHT OUTER JOIN B ON a.id = b.id);
References