BigData

DBMS Join

IT오이시이 2025. 11. 18. 17:53
728x90

 

[BigData의 Join 기초]
- DBMS Join
- Large DB (데이터베이스)의 Hash Join
- Large DB (데이터베이스)의 Nested Loop Join
- Large DB (데이터베이스)의 Sort-Merge Join

 

DBMS의 Join은 여러 테이블을 연결해 하나의 결과로 보여주는 SQL 기능으로, 공통된 컬럼(조인 키)을 기준으로 데이터를 결합합니다. 대표적으로 INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL OUTER JOIN 등이 있습니다.

 

🔍 JOIN의 개념

  • 정의: 두 개 이상의 테이블을 연결하여 관련 데이터를 하나의 결과로 조회하는 SQL 기능
  • 목적:
    • 정규화된 테이블을 분석/조회 목적에 맞게 통합
    • 중복 없이 정확한 데이터 연결
    • 업무 로직에 맞는 데이터 집합 생성
  • 전제 조건: 테이블 간에 공통된 컬럼(보통 Primary Key와 Foreign Key)이 있어야 함

📚 Join의 주요 종류와 예시

 

Source: https://www.reddit.com/r/SQL/comments/aysflk/sql_join_chart_custom_poster_size/

 


🧾 JOIN의 문법 정리

1. INNER JOIN

  • 설명: 두 테이블에서 조인 조건에 모두 일치하는 행만 반환
  • 문법:
    SELECT A.col1, B.col2
    FROM TableA A
    INNER JOIN TableB B ON A.key = B.key;
    

 

2. LEFT JOIN (LEFT OUTER JOIN)

  • 설명: 왼쪽 테이블의 모든 행 + 오른쪽 테이블에서 조건 일치하는 행
  • 문법:
    SELECT A.col1, B.col2
    FROM TableA A
    LEFT JOIN TableB B ON A.key = B.key;
    

 

3. RIGHT JOIN (RIGHT OUTER JOIN)

  • 설명: 오른쪽 테이블의 모든 행 + 왼쪽 테이블에서 조건 일치하는 행
  • 문법:
    SELECT A.col1, B.col2
    FROM TableA A
    RIGHT JOIN TableB B ON A.key = B.key;
    

 

4. FULL OUTER JOIN

  • 설명: 양쪽 테이블의 모든 행을 반환. 조건 불일치 시 NULL 포함
  • 문법:
    SELECT A.col1, B.col2
    FROM TableA A
    FULL OUTER JOIN TableB B ON A.key = B.key;
    

 

5. CROSS JOIN

  • 설명: 두 테이블의 모든 행 조합 (카티션 곱)
  • 문법:
    SELECT A.col1, B.col2
    FROM TableA A
    CROSS JOIN TableB B;
    

 

📌 JOIN 사용 시 주의사항

  • 조건 없이 JOIN하면 CROSS JOIN이 발생 → 데이터 폭증 위험
  • WHERE절과 JOIN의 관계:
    • FROM A, B WHERE A.key = B.key → 사실상 INNER JOIN과 동일
  • USING 절: 공통 컬럼명이 같을 때 간단히 표현 가능
    SELECT * FROM A JOIN B USING (key);
    

📊 JOIN 비교 요약

JOIN 종류반환되는 데이터

INNER JOIN 양쪽 테이블에서 조건에 일치하는 행만
LEFT JOIN 왼쪽 테이블 전체 + 오른쪽 조건 일치 행
RIGHT JOIN 오른쪽 테이블 전체 + 왼쪽 조건 일치 행
FULL OUTER JOIN 양쪽 테이블 전체 + 조건 불일치 시 NULL 포함
CROSS JOIN 모든 가능한 행 조합

 


 

기본 문법

CREATE TABLE Table1 (ID INT);
 
INSERT INTO Table1
VALUES (1),(5),(3),(6),(7);

CREATE TABLE Table2
(ID INT PRIMARY KEY CLUSTERED) ;
 
INSERT INTO Table2
VALUES (1),(2),(5),(6),(3),(8),(7) ;

 

/*  JOIN 기본 문법  */

SELECT * FROM Table1 
INNER JOIN Table2 ON Table1.ID = Table2.ID ;

// Table1 ooo Join  Table2 ON  Condition Clause

 

종류 특징 SQL 예시 결과
INNER JOIN 두 테이블에서 조건에 일치하는 데이터만 조회 (교집합) SELECT E.EMP_NAME, D.DEPT_NAME
FROM EMP E INNER JOIN DEPT D
     ON E.DEPT_ID = D.DEPT_ID;
공통된 DEPT_ID가 있는 사원만 출력 
LEFT JOIN 왼쪽 테이블의 모든 데이터 + 오른쪽 테이블에서 조건 일치 시 결합, 없으면 NULL SELECT E.EMP_NAME, D.DEPT_NAME
FROM EMP E LEFT JOIN DEPT D
    ON E.DEPT_ID = D.DEPT_ID;
사원은 모두 출력, 부서 없으면 NULL
RIGHT JOIN 오른쪽 테이블의 모든 데이터 + 왼쪽 테이블에서 조건 일치 시 결합, 없으면 NULL SELECT E.EMP_NAME, D.DEPT_NAME
FROM EMP E RIGHT JOIN DEPT D
      ON E.DEPT_ID = D.DEPT_ID;
부서는 모두 출력, 사원 없으면 NULL
FULL OUTER JOIN 양쪽 테이블의 모든 데이터 출력, 조건 불일치 시 NULL SELECT E.EMP_NAME, D.DEPT_NAME
FROM EMP E FULL OUTER JOIN DEPT D
     ON E.DEPT_ID = D.DEPT_ID;
사원·부서 모두 출력, 불일치 시 NULL

 

 


📌 정리

  • INNER JOIN → 교집합
  • LEFT JOIN → 왼쪽 기준 전체 + 오른쪽 매칭
  • RIGHT JOIN → 오른쪽 기준 전체 + 왼쪽 매칭
  • FULL OUTER JOIN → 양쪽 전체, 매칭 없으면 NULL

 

[참고]

Internals of Physical Join Operators (Nested Loops Join, Hash Match Join & Merge Join) in SQL Server

 

728x90
반응형