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

  • 교집합: 양쪽 테이블에서 일치하는 행만 반환
  • 쿼리 예시:
sql
1SELECT 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로 표시
  • 쿼리 예시:
sql
1SELECT 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로 표시
  • 쿼리 예시:
sql
1SELECT 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로 표시
  • 쿼리 예시:
sql
1SELECT 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

  • 중복 제거: 합집합을 만들지만 중복된 행은 하나만 남습니다.
  • 쿼리 예시:
sql
1SELECT col1 FROM TB1
2UNION
3SELECT col1 FROM TB2;
  • 결과:
| col1 |
|------|
| a    |
| b    |
| c    |

2. Union All

  • 중복 포함: 중복 데이터를 포함하여 모두 반환합니다.
  • 쿼리 예시:
sql
1SELECT 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