JOIN

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 JOINRIGHT OUTER JOIN을 합친 것으로 양쪽 모두 조건이 일치하지 않는 것들까지 모두 결합하여 출력한다.