🧩 조인의 종류
조인(Join)이란 두 개 이상의 테이블을 묶어서 하나의 결과물로 만드는 작업입니다.
조인의 종류:
- 내부 조인(inner join): 두 테이블의 교집합입니다. 양쪽 모두에 데이터가 있는 행만 표기합니다.
- 왼쪽 조인(left outer join): 왼쪽 테이블의 모든 행을 표기하고, 오른쪽은 매칭되는 것만 붙입니다.
- 오른쪽 조인(right outer join): 오른쪽 테이블의 모든 행을 표기하고, 왼쪽은 매칭되는 것만 붙입니다.
- 합집합 조인(full outer join) : 두 테이블의 모든 행(합집합)을 표기합니다.
💻 조인 코드 예시
1. 내부 조인 : 두 테이블 간에 교집합을 나타냅니다.
SELECT * FROM TableA A
INNER JOIN TableB B ON
A.key=B.key
2. 왼쪽 조인 : 테이블 A(왼쪽)를 기준으로 합니다. 매칭되지 않는 B의 값은 NULL이 됩니다.
SELECT * FROM tableA A
LEFT JOIN TableB B ON
A.key=B.key
3. 오른쪽 조인 : 테이블 B(오른쪽)를 기준으로 합니다. 매칭되지 않는 A의 값은 NULL이 됩니다.
SELECT * FROM TableA A
RIGHT JOIN TableB B ON
A.key=B.key
4. 합집합 조인(완전 외부 조인) : 양쪽 테이블의 모든 데이터를 가져옵니다. 없는 쪽은 NULL로 채워집니다.
SELECT * FROM TableA A
FULL OUTER JOIN TableB B ON
A.key=B.key
⚙️ 조인의 원리
🔄 중첩 루프 조임(NLJ, Nested Loop Join)
이름 그대로 반복문(Loop)이 중첩된 형태입니다.
- 원리: for 문을 돌리듯 첫 번째 테이블의 행을 하나씩 읽고, 그에 맞는 값을 두 번째 테이블에서 반복해서 찾습니다.
- 특징: 랜덤 액세스가 발생하여 대용량 테이블에서는 성능이 떨어집니다.
for each row in t1 matching reference key{
for each row in t2 matching reference key{
if row satisfies join conditions, send to client
}
}
참고로 중첩 루프 조인에서 발전한 조인할 테이블을 작은 블록으로 나눠서 블록 하나씩 조인하는 블록 중첩 루프 조인(BNL, Block Nested Loop)이라는 방식도 있습니다.
📉 정렬 병합 조인(Sort Merge Join)
데이터를 순서대로 정렬(Sort)한 뒤 합치는 방식입니다.
- 원리: 양쪽 테이블을 조인 키(Key) 기준으로 오름차순 정렬한 뒤, 위에서부터 스캔하며 짝을 맞춥니다.
- 사용 시기: 인덱스가 없거나, 대용량 데이터를 처리할 때, 혹은 범위 검색(<, >)일 때 유리합니다.
#️⃣ 해시 조인(Hash Join)
해시 테이블을 기반으로 조인하는 방법입니다. 두 개의 테이블을 조인한다고 했을 때 하나의 테이블이 메모리에 온전히 들어간다면 보통 중첩 루프 조인보다 더 효율적입니다.(메모리에 올릴 수 없을 정도로 크다면 디스크를 사용하는 비용이 발생됩니다.) 또한, 동등(=) 조인에서만 사용할 수 있습니다.
- 빌드 단계:
- 입력 테이블 중 하나를 기반으로 메모리 내 해시 테이블을 빌드하는 단계
- 예를 들어 persons와 countries라는 테이블을 조인한다고 했을 때 둘 중에 바이트가 더 작은 테이블을 기반으로 해서 테이블을 빌드
- 조인에 사용되는 필드가 해시 테이블의 키로 사용
- 프로브 단계:
- 레코드를 읽기 시작
- 각 레코드에서 찾는 키와 일치하는 레코드를 찾아서 결괏값으로 반환
- 각 테이블을 한 번씩만 읽게 되어 중첩해서 두 개의 테이블을 읽는 중첩 루프 조인보다 보통은 성능이 좋음
- 사용 가능한 메모리양은 시스템 변주 join_buffer_size에 의해 제어되며, 런타임 시에 조정 가능
'Computer Science > Database' 카테고리의 다른 글
| 🔖 인덱스 (0) | 2025.12.03 |
|---|---|
| 🔍 데이터베이스의 종류 (0) | 2025.12.03 |
| 🔐 트랜잭션과 무결성 (0) | 2025.12.03 |
| 📐 ERD와 정규화 과정 (0) | 2025.12.02 |
| 🗄️ 데이터베이스의 기본 (0) | 2025.12.02 |
