두 개 이상의 테이블을 묶어 하나의 결과를 만드는 것을 말합니다. 조인의 종류로는 INNER JOIN, LEFT OUTER JOIN, RIGHT OUTER JOIN, FULL OUTER JOIN, CROSS JOIN, SELF JOIN이 있습니다.
일단 요약 보고 가기
INNER JOIN은 두 테이블을 조인할 때, 두 테이블에 모두 지정한 열의 데이터가 있어야 합니다.
OUTER JOIN은 두 테이블을 조인할 때, 1개의 테이블에만 데이터가 있어도 결과가 나옵니다.
CROSS JOIN은 한쪽 테이블의 모든 행과 다른 쪽 테이블의 모든 행을 조인하는 것을 말합니다.
SELF JOIN은 자신이 자신과 조인한다는 의미로, 1개의 테이블을 사용합니다.
내부 조인이라고도 하며, 테이블간의 교집합을 나타냅니다.
두 테이블이 있다면, 두 테이블의 두 행이 모두 일치하는 행이 있는 부분만 보여줍니다.
SELECT * FROM TableA A
INNER JOIN TableB B ON
A.key = B.key
왼쪽 조인이라고도 하며, 두 테이블이 있을 때, 테이블 B의 일치하는 부분의 레코드와 함께, 테이블 A를 기준으로 완전한 레코드 집합을 생성합니다. 만약 테이블 B에 일치하는 부분이 없다면 해당 값은 NULL 값이 됩니다.
테이블 A를 기준으로 조인을 한다고 생각합시다.
SELECT * FROM TableA A
LEFT JOIN TableB B
ON A.key = B.key
오른쪽 조인이라고도 하며, 두 테이블이 있을 때, 테이블 A의 일치하는 부분의 레코드와 함께, 테이블 B를 기준으로 완전한 레코드 집합을 생성합니다. 만약 테이블 A에 일치하는 부분이 없다면 해당 값은 NULL 값이 됩니다.
테이블 B를 기준으로 조인을 한다고 생각합시다.
SELECT * FROM TableA A
RIGHT JOIN TableB B
ON A.key = B.key
합집합 조인이라고도 하며, 두 테이블이 있을 때, 양쪽 테이블에서 일치하는 부분의 레코드와 함께, 테이블 A와 테이블 B의 모든 레코드 집합을 생성합니다. 일치하는 부분이 없다면 누락된 쪽에 NULL 값이 포함되어 출력됩니다.
조인 조건에 만족되지 않는 행까지 모두 표기한다는 특징이 있습니다.
SELECT * FROM TableA A
FULL OUTER JOIN TableB B ON
A.key = B.key
상호 조인이라고도 하며, 두 테이블이 있을 때, 테이블A 의 모든 행들과 테이블B의 모든 행을 조인시키는 것을 말하며, 조인 조건이 없을 때 생길 수 있는 모든 데이터의 조합이 나타납니다.
CROSS JOIN의 결과는 두 테이블의 행의 개수를 곱한 것과 같습니다.
SELECT * FROM TableA
CROSS JOIN TableB
SELECT * FROM TableA, TableB
자체 조인이라고도 하며, 동일한 테이블간의 조인을 말합니다.
동일한 테이블 사이의 조인을 수행하면 테이블과 컬럼 이름이 모두 동일하기 때문에 식별을 위해 반드시 테이블 별칭을 사용해야 합니다.
SELECT * FROM TableA A
JOIN TableA B
ON A.name = B.name
조인이 이루어지는 원리로, 중첩 루프 조인, 정렬 병합 조인, 해시 조인이 있습니다.
중첩 for문과 같은 원리로 조건에 맞는 조인을 하는 방법입니다. 랜덤 접근에 대한 비용이 많이 증가하기 때문에 대용량의 테이블에서는 사용하지 않습니다.
두 테이블을 조인한다고 했을 때, 첫 번째 테이블에서 행을 한 번에 하나씩 읽고, 두 번쨰 테이블에서도 행을 하나씩 읽어 조건에 맞는 레코드를 찾아 결과를 반환합니다.
조인할 테이블을 작은 블록으로 나눠서, 블록 단위로 주인하는 블록 중첩 루프 조인도 있습니다.
각각의 테이블을 조인할 필드 기준으로 정렬하고, 정렬이 끝난 이후에 조인 작업을 수행하는 조인입니다. 조인을 할떄 사용할 적절한 인덱스가 없고, 대용량의 테이블들을 조인하고 조인 조건으로 범위 비교 연산자가 있을 때 사용합니다.
각 테이블을 한 번씩만 읽게 되어서, 두 개의 테이블을 읽는 중첩 루프 조인보다 대체로 성능이 좋습니다.
해시 테이블을 기준으로 조인하는 방법입니다. 동등 조인에서만 사용할 수 있습니다.
빌드 단계와 프로브 단계로 나뉩니다.
입력 테이블 중 하나를 기반으로 메모리 내 해시 테이블을 빌드하는 단계로, 작은 테이블을 기반으로 하여 해시 테이블을 만듭니다.
조인에 사용되는 필드가 테이블의 키로 사용됩니다.
이 단계동안 레코드 읽기를 시작합니다. 각 레코드에서 키와 일치하는 레코드를 찾아 결과값으로 반환합니다.