데이터베이스 조인

기술노트

데이터베이스 조인 (Database JOIN)

← 목록으로 돌아가기

JOIN은 두 개 이상의 테이블에 나뉘어 저장된 데이터를, 서로 공유하는 값을 기준으로 연결하여 하나의 결과 집합으로 결합하는 SQL의 핵심 기능입니다.

관계형 데이터베이스는 데이터의 중복을 피하기 위해 데이터를 여러 개의 테이블로 나누어 관리합니다(정규화). 따라서 사용자가 의미 있는 데이터를 얻기 위해서는 여러 테이블을 연결하는 JOIN 연산이 필수적입니다. 예를 들어, `고객` 테이블과 `주문` 테이블을 조인하면 '어떤 고객이 어떤 상품을 주문했는지'에 대한 정보를 얻을 수 있습니다.


예제 테이블

아래 두 개의 테이블을 사용하여 다양한 JOIN의 종류를 알아보겠습니다.

<Customers> 테이블 | CustomerID | CustomerName | |---|---| | 1 | 김철수 | | 2 | 이영희 | | 3 | 박지성 |

<Orders> 테이블 | OrderID | CustomerID | ProductName | |---|---|---| | 101 | 1 | 노트북 | | 102 | 1 | 마우스 | | 103 | 3 | 키보드 | | 104 | 4 | 모니터 |


JOIN의 종류

1. INNER JOIN (내부 조인)
두 테이블에서 조인 조건이 일치하는 행만 반환합니다. 가장 일반적으로 사용되는 조인 방식입니다.
  • **개념:** 두 테이블의 교집합에 해당하는 데이터를 반환합니다.
  • **SQL 예시:**
 ```sql
 SELECT C.CustomerName, O.ProductName
 FROM Customers C
 INNER JOIN Orders O ON C.CustomerID = O.CustomerID;
 ```
  • **결과:** (주문 기록이 있는 고객의 정보만 반환)

| CustomerName | ProductName | |---|---| | 김철수 | 노트북 | | 김철수 | 마우스 | | 박지성 | 키보드 |

2. LEFT OUTER JOIN (왼쪽 외부 조인)
왼쪽 테이블의 모든 행을 반환하고, 오른쪽 테이블에서는 조인 조건이 일치하는 행만 반환합니다. 일치하는 행이 없으면 NULL로 표시됩니다.
  • **개념:** 왼쪽 테이블을 기준으로, 오른쪽 테이블의 데이터를 가져와 붙입니다.
  • **SQL 예시:**
 ```sql
 SELECT C.CustomerName, O.ProductName
 FROM Customers C
 LEFT JOIN Orders O ON C.CustomerID = O.CustomerID;
 ```
  • **결과:** (모든 고객을 보여주되, 주문이 없는 고객의 상품명은 NULL로 표시)

| CustomerName | ProductName | |---|---| | 김철수 | 노트북 | | 김철수 | 마우스 | | 이영희 | NULL | | 박지성 | 키보드 |

3. RIGHT OUTER JOIN (오른쪽 외부 조인)
오른쪽 테이블의 모든 행을 반환하고, 왼쪽 테이블에서는 조인 조건이 일치하는 행만 반환합니다. 일치하는 행이 없으면 NULL로 표시됩니다.
  • **개념:** 오른쪽 테이블을 기준으로, 왼쪽 테이블의 데이터를 가져와 붙입니다.
  • **SQL 예시:**
 ```sql
 SELECT C.CustomerName, O.ProductName
 FROM Customers C
 RIGHT JOIN Orders O ON C.CustomerID = O.CustomerID;
 ```
  • **결과:** (모든 주문을 보여주되, 고객 정보가 없는 주문의 고객명은 NULL로 표시)

| CustomerName | ProductName | |---|---| | 김철수 | 노트북 | | 김철수 | 마우스 | | 박지성 | 키보드 | | NULL | 모니터 |

4. FULL OUTER JOIN (완전 외부 조인)
두 테이블의 모든 행을 반환합니다. 조인 조건이 일치하지 않는 행은 해당 테이블의 컬럼 값을 NULL로 표시합니다.
  • **개념:** 두 테이블의 합집합에 해당하는 데이터를 반환합니다. (LEFT JOIN과 RIGHT JOIN의 결과를 합친 것과 유사)
  • **SQL 예시:**
 ```sql
 SELECT C.CustomerName, O.ProductName
 FROM Customers C
 FULL OUTER JOIN Orders O ON C.CustomerID = O.CustomerID;
 ```
  • **결과:** (주문 여부와 관계없이 모든 고객과, 고객 정보 유무와 관계없이 모든 주문을 표시)

| CustomerName | ProductName | |---|---| | 김철수 | 노트북 | | 김철수 | 마우스 | | 이영희 | NULL | | 박지성 | 키보드 | | NULL | 모니터 |

5. SELF JOIN (자체 조인)
하나의 테이블을 자기 자신과 조인하는 방식입니다. 테이블 내에서 서로 관계가 있는 데이터를 찾을 때 사용합니다. (예: 직원의 관리자 정보 찾기)
  • **개념:** 반드시 테이블에 별칭(Alias)을 사용하여 두 개의 다른 테이블처럼 다루어야 합니다.