본문 바로가기
데이터베이스/Oracle

[DB/Oracle] Oracle SQL Join : 논리적 조인 & 물리적 조인

by drCode 2025. 9. 25.
728x90
반응형

데이터베이스에서 Join은 여러 테이블을 연결해 원하는 결과를 만드는 핵심 도구입니다.
Oracle SQL에서는 크게 두 가지 차원에서 조인을 이해할 수 있습니다.

  1. 논리적 조인(Logical Join): 결과 집합 관점 → 어떤 데이터를 가져올까?
  2. 물리적 조인(Physical Join): 실행 계획 관점 → 데이터를 어떻게 가져올까?

이번 포스팅에서는 논리적 조인 6가지 유형물리적 조인 3가지 방식을 다이어그램, SQL 예제와 함께 정리해보겠습니다.

 

🔹 1. 논리적 조인 (Logical Join)

① Inner Join

  • 교집합: 두 테이블 모두에 존재하는 데이터만 가져옴.
SELECT a.*, b.*
FROM A a
INNER JOIN B b
  ON a.key = b.key;

 

교집합 영역

📌 활용: 고객-주문 관계에서 실제 주문이 있는 고객만 추출


② Left Outer Join

  • A 기준 전체 + 매칭된 B
SELECT a.*, b.*
FROM A a
LEFT JOIN B b
  ON a.key = b.key;

 

📌 활용: 모든 고객을 가져오고, 주문이 없는 고객도 표시


③ Right Outer Join

  • B 기준 전체 + 매칭된 A
SELECT a.*, b.*
FROM A a
RIGHT JOIN B b
  ON a.key = b.key;

 

④ Full Outer Join

  • 합집합: 어느 한쪽에만 있어도 포함

합집합

 

⑤ Left Anti Join (A - B)

  • A에는 있지만 B에는 없는 데이터
SELECT a.*
FROM A a
LEFT JOIN B b
  ON a.key = b.key
WHERE b.key IS NULL;

 

Left Anti Join


⑥ Right Anti Join (B - A)

  • B에는 있지만 A에는 없는 데이터
SELECT b.*
FROM A a
RIGHT JOIN B b
  ON a.key = b.key
WHERE a.key IS NULL;

 

Right Anti Join

 


🔹 2. 물리적 조인 (Physical Join)

논리적으로는 같은 SQL이라도, 옵티마이저가 선택하는 실행 계획에 따라 실제 조인 방식이 달라집니다.

① Nested Loop Join

  • **작은 집합(Outer)**에서 Row를 하나씩 읽고, **큰 집합(Inner)**에서 인덱스를 통해 매칭
  • 장점: 소량 데이터, 인덱스 활용 시 빠름
  • 힌트: USE_NL
SELECT /*+ USE_NL(b) */ a.col, b.col
FROM A a
JOIN B b ON a.id = b.id;

 

Nested Loop Join

 

📌 활용: OLTP 트랜잭션 조회 (예: 특정 고객의 주문 상세 검색)

(다이어그램: Outer → Prefetch → Inner Index → Inner Table)

 

② Hash Join

  • 작은 테이블을 메모리에 Hash Build → 큰 테이블을 Probe하면서 매칭
  • 장점: 대용량 조인, 인덱스 불필요
  • 힌트: USE_HASH
SELECT /*+ USE_HASH(b) */ a.col, b.col
FROM A a
JOIN B b ON a.id = b.id;

Hash Join

📌 활용: DW, 배치성 통계 쿼리

(다이어그램: Table A → Hash Build / Table B → Probe → Match)

 


③ Sort-Merge Join

  • 두 테이블을 조인 키 기준으로 정렬 후 병합
  • 장점: 이미 정렬된 데이터, 범위 조인 시 유리
  • 힌트: USE_MERGE
SELECT /*+ USE_MERGE(b) */ a.col, b.col
FROM A a
JOIN B b ON a.id = b.id;

 

Sort-Merge Join

📌 활용: 기간별 거래 데이터와 고객 데이터 조인

(다이어그램: Table A → Sort / Table B → Sort → Merge → Output)


🔹 3. 요약 비교

 

구분  유형  특징  적합한 상황
논리적 조인 Inner / Left / Right / Full / Left Anti / Right Anti 어떤 데이터를 가져올지 정의 결과 집합 설계
물리적 조인 Nested Loop / Hash / Sort-Merge 데이터를 어떻게 가져올지 정의 실행 계획 최적화

 

🔹 마무리

  • SQL 작성 시에는 논리적 조인을 통해 원하는 결과를 정의합니다.
  • 성능 문제 발생 시에는 실행 계획을 확인하고, Nested Loop / Hash / Sort-Merge 중 어떤 방식이 쓰이는지 분석해야 합니다.
  • 힌트를 활용해 옵티마이저의 선택을 유도할 수도 있습니다.
728x90
반응형

댓글