post-custom-banner

조인의 종류

JOIN은 크게 INNER JOIN과 OUTER JOIN 이렇게 2가지로 나뉜다.

Inner Join

내부조인 (inner join) :

INNER JOIN은 조인될 두 테이블 간에 조건이 모두 일치하는 행이 있는 부분만 가지고 오는 것. 즉, 위 그림 처럼 중간에 있는 교집합을 떠올리면 된다.

이렇게 사원 테이블과 직책 테이블이 존재할 때 INNER JOIN을 수행해서 이 두 테이블의 모든 공통된 정보를 가지고 오려고 한다면 먼저, 두 테이블의 관계를 연결해주는 연결고리가 필요하다. 그 연결고리 역할은 여기서 공통적으로 들어 있는 직책 번호라는 칼럼(필드)이 된다. 그러면 다음과 같은 SQL문을 작성할 수 있다.

-조인하려는 테이블 명을 JOIN을 기준으로 양쪽에 써준 뒤
-교집합이 되는 각 테이블의 칼럼명을 ON이나 혹은 WHERE로 명시.

SELECT * FROM 사원 
INNER JOIN 직책  
ON 사원.직책번호 = 직책.직책번호; 

Outer Join

OUTER JOIN은 INNER JOIN과 마찬가지로 두 테이블의 정보를 가지고 오게 된다. 하지만 INNER JOIN은 단순히 교집합이 되는 칼럼만 가지고 오는 것이라면, OUTER JOIN은

  1. 두 테이블 간의 교집합이 되는 데이터뿐만 아닌, 공통되지 않는 값까지 가져온다.
  2. 드라이빙 테이블(기준이 되는 테이블)이 필요하다.

OUTER JOIN은 기준이 되는 테이블의 정보는 모두 가지고 오고, 대상이 되는 테이블은 JOIN 조건이 일치하지 않아도 가지고 온다.

그렇다면 기준이 되는 테이블인 드라이빙 테이블은 항상 잘 선택해야 할 것이다. 왜냐하면 테이블의 모든 영역을 가지고 오기 때문에 쿼리의 성능에 있어서도 많은 영향을 끼칠 수 있기 때문이다.

왼쪽 조인 (Left Outer Join)

LEFT OUTER JOIN은 기준 테이블을 왼쪽에 두고 OUTER JOIN을 수행하는 것. 기준 테이블은 움직이거나 변형이 없고 대상이 되는 테이블만 변형이 되는데, 만약 오른쪽 테이블에 기준 테이블과 일치하는 항목이 없으면 해당 값은 NULL이 된다.

FROM A
LEFT OUTER JOIN B
ON A.학번 = B.학번

10, 21, 99학번은 B 테이블에 존재하지 않기 때문에 아이디와 동아리 값이 없다.

오른쪽 조인 (Right Outer Join)

RIGHT OUTER JOIN은 기준 테이블을 오른쪽에 두고 OUTER JOIN을 수행하는 것. 역시 기준이 되는 테이블은 움직이거나 변형이 없고, 대상이 되는 테이블이 변형이 되는데 왼쪽 테이블에 기준 테이블과 일치하는 항목이 없으면 해당 값은 NULL이 된다.

SELECT *
FROM A
RIGHT OUTER JOIN B
ON A.학번 = B.학번

이번에는 B 테이블이 기준이기에 데이터를 이를 모두 가지고 온 뒤, 학번으로 연결하게 된다. A 테이블에는 11, 13, 14 학번이 없기 때문에 나이 성별 이름이 모두 NULL.

합집합 조인 (Full Outer Join)

합집합 조인(완전 외부 조인)은 왼쪽과 오른쪽 테이블의 모든 데이터를 읽어 결과를 생성한다. 즉, RIGHT OUTER JOIN과 LEFT OUTER JOIN의 결과를 합한 결과라고 볼 수 있다.
A 테이블과 B 테이블의 데이터가 모두 들어가고 조인에 따른 빈칸들까지도 NULL값으로 모두 표현됨.

profile
나는야 4개의 인간언어를 구사하고 2개의 컴퓨터언어를 배우는 개발자 꿈나무
post-custom-banner

0개의 댓글