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의 주요 종류와 예시

🧾 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
반응형
'BigData' 카테고리의 다른 글
| Large DB (데이터베이스)의 Hash Join (0) | 2025.11.16 |
|---|---|
| Large DB (데이터베이스)의 Nested Loop Join (0) | 2025.11.16 |
| Large DB (데이터베이스)의 Sort-Merge Join (0) | 2025.11.16 |
| YugabyteDB를 이용한 Claude Desktop MCP 서버 설치 (0) | 2025.10.14 |
| 분산DB-YugabyteDB - 클라우드 네이티브 분산 SQL 데이터베이스 설치 가이드 (1) | 2025.10.14 |
| Presidio: Data Protection and De-identification (0) | 2025.10.10 |
| 예시로 보는 *PyTorch 기반의 "DDPM(Denoising Diffusion Probabilistic Model)"* - 이미지생성모델 (2) | 2025.08.29 |