JOIN
기본형식
SELECT ‘열 목록’ FROM ‘테이블1’ ~join ‘테이블2’ ON (join 조건)
의미
각 테이블 간 의미 있는 데이터를 연결하는데 사용하는 메커니즘이며 적어도 하나의 컬럼이 테이블 사이에서 공유되어야
한다.
필요한 이유
RDB를 정규화 하면 데이터 집합으로 테이블이 구성되고, 각 테이블끼리는
관계를 갖는다.
이러한 특징으로 RDB는 저장공간의 효율성과
확장성이 향상된다.
한편, 서로 관계 있는 데이터가 여러
테이블로 나뉘어 저장되므로, 각 테이블에 있는 데이터를 효율적으로 검색하기 위해 조인이 필요하다.
표현 방식
명시적 표현법과 묵시적 표현법이 있으며,
명시적 표현법은 ‘SELECT column FROM A_table JOIN B_table ON (A_column = B_column)’이고,
묵시적 표현법은 ‘SELECT column FROM A_table, B_table
WHERE (A_column = B_column)’와 같이 사용한다.
INNER JOIN과 OUTER
JOIN이 있는데, 이 둘의 차이점은 INNER JOIN은
조인조건에 만족하지 않는 데이터를 출력한다면 OUTER JOIN, 그렇지 않다면 INNER JOIN이 된다.
1.
INNER JOIN : 가장 일반적인 조인 형태로
빈번하게 사용한다. 둘 이상의 테이블에 존재하는 공통 컬럼의 값이 같은 것을 결과로 추출한다. 내부 조인에는 ‘동등 조인’, ‘자연
조인’, ‘교차 조인’ 등이 있다.
A.
동등 조인 : ‘Equi join’이라고도 하며, 조인의 가장 일반적인 형식이다. 둘 이상의 테이블에 존재하는 공통
컬럼의 동등만을 비교하며, 부등호 조인은 동등 조인에 포함 되지 않는다.
B.
자연 조인 : ‘natural join’이라고도
하며, 조인 대상 테이블의 모든 컬럼을 비교하여 같은 컬럼명을 가진 컬럼으로 조인을 수행한다. 이때, 동일한 이름은 갖는 컬럼은 한 번만 추출한다.
C.
교차 조인 : ‘cross join’이라고도
하며, 조인에 들어간 테이블들의 모든 데이터가 추출된다. 조인
조건이 잘못되었거나 정의하지 않았을 때, 테이블의 모든 행이 조인되는 경우에 발생한다. Cartesian Product 값을 얻을 수 있다. 너무 많은
레코드를 생성할 위험이 있기 때문에 드물게 사용하며, 테스트 용도로 대용량의 테이블을 생성시에 사용한다.
D.
셀프 조인 : 자가 조인이라고도 하며, 하나의 컬럼에 있는 값들과 이 컬럼에 들어있는 다른 값을 비교할 때 사용한다.
FROM절에 각각 다른 alias를 지정하여 테이블을 대입한다. 테이블의 한 컬럼이 자신의 다른 레코드를 참조할 때 사용한다.
2.
OUTER JOIN : 특정 테이블의 데이터가
모두 필요할 때 사용한다.
A.
LEFT OUTER JOIN : 오른쪽 테이블에
조인할 컬럼의 값이 없는 경우 사용한다. 왼쪽 테이블의 모든 데이터를 포함하는 결과를 만든다.
B.
RIGHT OUTER JOIN : 왼쪽 테이블에
조인할 컬럼의 값이 없는 경우 사용한다. 오른쪽 테이블의 모든 데이터를 포함하는 결과를 만든다.
C.
FULL OUTER JOIN : LEFT OUTER
JOIN과 RIGHT OUTER JOIN을 합친 것으로 양쪽 모두 조건이 일치하지 않는
것들까지 모두 결합하여 출력한다.