JOIN이란 데이터베이스 내의 여러 테이블에서 가져온 레코드(행)를 조합하여 하나의 테이블이나 결과 집합으로 표현하는 RDB에서 가장 많이 쓰이는 연산이다.
관계형 데이터베이스의 구조적 특징으로 정규화를 수행하면 의미 있는 데이터의 집합으로 테이블이 구성되고 각 테이블끼리는 서로 관계를 형성하게 된다. 관계형 데이터베이스는 저장 공간의 효율성과 확장성이 향상되게 된다. 서로 관계있는 데이터만을 조합하여 활용해야하는 경우 각 테이블에 저장된 데이터를 효과적으로 검색하기 위해 조인이 필요하게 되었다.
Inner Join(내부 조인)이란, 조인하는 테이블의 ON절의 조건이 일치하는 결과만 출력한다.
SELECT * FROM TableA A
INNER JOIN TableB B ON
A.key = B.key
쿼리문을 작성할 때 명확하게 표현하고자 AS(별칭)를 사용했다.
두 테이블이 합쳐질 때 기준을 왼쪽 테이블에 두는 것이다. INNER JOIN과 달리 LEFT JOIN은 조인하는 테이블의 순서가 정말 중요하다. 어떤 순서로 테이블을 조인하느냐에 따라 결과 테이블에 조회되는 행의 개수와 구성 등이 달라질 수 있기 때문이다. 따라서 JOIN문을 작성할 때, 만약 LEFT JOIN을 한다면 가장 첫 번째의 테이블로 SELECT문에 가장 많은 열을 가져와야 할 테이블을 우선으로 적어준다.
SELECT * FROM TableA A
LEFT JOIN TableB B ON
A.key = B.key WHERE B.key IS NULL
쿼리문을 작성할 때 명확하게 표현하고자 AS(별칭)를 사용했다.
원하는 정보가 테이블 3개로 분리되어있을때, 이 3개의 테이블을 모아 LEFT JOIN을 연속으로 3번 사용한다.
두 테이블이 합쳐질 때 기준을 오른쪽 테이블에 두는 것이다. LEFT JOIN과 달리 기준 테이블이 오른쪽에 있는 것으로 이해할 수 있다.
SELECT * FROM TableA A
RIGHT JOIN TableB B ON
A.key = B.key WHERE A.key IS NULL
쿼리문을 작성할 때 명확하게 표현하고자 AS(별칭)를 사용했다.
대부분의 DB에서 FULL OUTER JOIN을 지원하지 않으나 이를 간접적으로 구현하는 방법이 존재한다.
LEFT JOIN한 테이블과 RIGHT JOIN한 테이블을 UNION(합집합) 처리해주면 된다. UNION과 UNION ALL의 차이점은 바로 중복 제거에 있다. UNION의 경우 DISTINCT가 적용되어 자동으로 중복을 제거해주나 UNION ALL의 경우 중복을 포함한다.
SELECT * FROM TableA A
FULL OUTER JOIN TableB B ON
A.key = B.key
카테고리를 구현할 때 적용되는 조인으로 테이블 자기 자신으로 조인하는 것이다.