2025년 5월 17일
카테고리 : DB이론
조회 : 84|1분 읽기
SQL Join과 Union
SQL Join과 Union 완전 정복
들어가며
SQL을 공부하거나 실무에서 활용할 때 Join과 Union을 이해하는 것은 매우 중요합니다.
특히, Join은 두 테이블을 결합하여 데이터를 조회할 때, Union은 여러 쿼리의 결과를 하나로 합칠 때 사용됩니다. 하지만 Join과 Union은 복잡한 데이터 구조와 맞물리면 그 결과를 예측하기 어려운 경우가 많습니다.
이번 글에서는 실제 테이블 구조와 데이터를 통해 Join과 Union의 동작을 명확히 이해해보겠습니다.
Join과 예제 테이블
기본 테이블 구조
다음과 같은 두 개의 테이블이 있다고 가정합니다.
TB1
| col1 | col2 |
|------|------|
| a | 1 |
| b | 1 |
| b | 2 |
TB2
| col1 | col2 |
|------|------|
| a | 5 |
| a | 9 |
| c | NULL |
1. Inner Join
- 교집합: 양쪽 테이블에서 일치하는 행만 반환
- 쿼리 예시:
sql1SELECT TB1.col1, TB1.col2, TB2.col2 2FROM TB1 3INNER JOIN TB2 ON TB1.col1 = TB2.col1;
- 결과:
| col1 | TB1.col2 | TB2.col2 |
|------|----------|----------|
| a | 1 | 5 |
| a | 1 | 9 |
2. Left Join
- 왼쪽 테이블의 모든 행을 가져오고, 일치하지 않는 경우 NULL로 표시
- 쿼리 예시:
sql1SELECT TB1.col1, TB1.col2, TB2.col2 2FROM TB1 3LEFT JOIN TB2 ON TB1.col1 = TB2.col1;
- 결과:
| col1 | TB1.col2 | TB2.col2 |
|------|----------|----------|
| a | 1 | 5 |
| a | 1 | 9 |
| b | 1 | NULL |
| b | 2 | NULL |
3. Right Join
- 오른쪽 테이블의 모든 행을 가져오고, 일치하지 않는 경우 NULL로 표시
- 쿼리 예시:
sql1SELECT TB1.col1, TB1.col2, TB2.col2 2FROM TB1 3RIGHT JOIN TB2 ON TB1.col1 = TB2.col1;
- 결과:
| col1 | TB1.col2 | TB2.col2 |
|------|----------|----------|
| a | 1 | 5 |
| a | 1 | 9 |
| c | NULL | NULL |
4. Full Outer Join
- 양쪽 테이블의 모든 데이터를 포함하여 일치하지 않는 경우 NULL로 표시
- 쿼리 예시:
sql1SELECT TB1.col1, TB1.col2, TB2.col2 2FROM TB1 3FULL OUTER JOIN TB2 ON TB1.col1 = TB2.col1;
- 결과:
| col1 | TB1.col2 | TB2.col2 |
|------|----------|----------|
| a | 1 | 5 |
| a | 1 | 9 |
| b | 1 | NULL |
| b | 2 | NULL |
| c | NULL | NULL |
Union과 Union All
Union은 두 개 이상의 쿼리 결과를 하나로 합칠 때 사용합니다. 하지만 중복된 데이터를 처리하는 방식에서 차이가 있습니다.
1. Union
- 중복 제거: 합집합을 만들지만 중복된 행은 하나만 남습니다.
- 쿼리 예시:
sql1SELECT col1 FROM TB1 2UNION 3SELECT col1 FROM TB2;
- 결과:
| col1 |
|------|
| a |
| b |
| c |
2. Union All
- 중복 포함: 중복 데이터를 포함하여 모두 반환합니다.
- 쿼리 예시:
sql1SELECT col1 FROM TB1 2UNION ALL 3SELECT col1 FROM TB2;
- 결과:
| col1 |
|------|
| a |
| b |
| b |
| a |
| a |
| c |
Union과 Union All의 차이점
-
중복 처리: Union은 중복을 제거하고, Union All은 중복을 포함합니다.
-
성능: 중복 제거 과정이 없는 Union All이 더 빠릅니다.
-
사용 예:
- 중복을 제거해야 할 때는 Union
- 중복이 허용되며 성능이 중요할 때는 Union All