🔗조인

2025. 12. 3. 16:42·Computer Science/Database

🧩 조인의 종류

조인(Join)이란 두 개 이상의 테이블을 묶어서 하나의 결과물로 만드는 작업입니다.

 

조인의 종류: 

  1. 내부 조인(inner join): 두 테이블의 교집합입니다. 양쪽 모두에 데이터가 있는 행만 표기합니다.
  2. 왼쪽 조인(left outer join): 왼쪽 테이블의 모든 행을 표기하고, 오른쪽은 매칭되는 것만 붙입니다.
  3. 오른쪽 조인(right outer join): 오른쪽 테이블의 모든 행을 표기하고, 왼쪽은 매칭되는 것만 붙입니다.
  4. 합집합 조인(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)

해시 테이블을 기반으로 조인하는 방법입니다. 두 개의 테이블을 조인한다고 했을 때 하나의 테이블이 메모리에 온전히 들어간다면 보통 중첩 루프 조인보다 더 효율적입니다.(메모리에 올릴 수 없을 정도로 크다면 디스크를 사용하는 비용이 발생됩니다.) 또한, 동등(=) 조인에서만 사용할 수 있습니다.

  1. 빌드 단계:
    • 입력 테이블 중 하나를 기반으로 메모리 내 해시 테이블을 빌드하는 단계
    • 예를 들어 persons와 countries라는 테이블을 조인한다고 했을 때 둘 중에 바이트가 더 작은 테이블을 기반으로 해서 테이블을 빌드
    • 조인에 사용되는 필드가 해시 테이블의 키로 사용
  2. 프로브 단계:
    • 레코드를 읽기 시작
    • 각 레코드에서 찾는 키와 일치하는 레코드를 찾아서 결괏값으로 반환
    • 각 테이블을 한 번씩만 읽게 되어 중첩해서 두 개의 테이블을 읽는 중첩 루프 조인보다 보통은 성능이 좋음
    • 사용 가능한 메모리양은 시스템 변주 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
'Computer Science/Database' 카테고리의 다른 글
  • 🔖 인덱스
  • 🔍 데이터베이스의 종류
  • 🔐 트랜잭션과 무결성
  • 📐 ERD와 정규화 과정
TECHNING
TECHNING
Hi! I'm techning
  • TECHNING
    TECHNING
    TECHNING
    • 분류 전체보기 (54)
      • Computer Science (45)
        • Design Pattern (11)
        • Programming Paradigm (4)
        • Network (15)
        • Operating System (6)
        • Database (6)
        • Data Structure (3)
      • Algorithm (5)
        • Python (3)
        • Java (1)
      • IT Insight (4)
  • hELLO· Designed By정상우.v4.10.4
TECHNING
🔗조인
상단으로

티스토리툴바