ZeroBase/CS

데이터베이스 Join

Red_Horse 2025. 9. 24. 23:58

Join은 두 개 이상의 테이블을 연결하여 데이터를 탐색하는 방법입니다. MySQL에서는 JOIN 키워드로, MongoDB에서는 lookup 쿼리로 이를 처리할 수 있습니다.

 

내부조인 (INNER JOIN)

두 테이블에서 일치하는 데이터만 반환합니다. (교집합 개념)

 
 
 
 

특징

  • 교집합: 양쪽 테이블에 모두 존재하는 데이터만 결과로 반환
  • 매칭 조건 필수: ON 절의 조건을 만족하는 행만 포함
  • 가장 일반적: 대부분의 조인 상황에서 사용

외부조인 (OUTER JOIN)

 

1. 왼쪽 외부조인 (LEFT OUTER JOIN)

첫 번째 테이블의 모든 레코드와 두 번째 테이블의 일치하는 레코드를 반환합니다. 오른쪽 테이블에 일치하는 레코드가 없다면, NULL 값으로 채워집니다.

-- 모든 고객과 주문 정보 (주문이 없는 고객도 포함)
SELECT c.customer_name, o.order_date, o.amount
FROM customers c
LEFT JOIN orders o ON c.customer_id = o.customer_id;
 
 
 

2. 오른쪽 외부조인 (RIGHT OUTER JOIN)

두 번째 테이블의 모든 레코드와 첫 번째 테이블의 일치하는 레코드를 반환합니다. 왼쪽 테이블에 일치하는 레코드가 없다면, NULL 값으로 채워집니다.

-- 모든 주문과 고객 정보 (고객 정보가 없는 주문도 포함)
SELECT c.customer_name, o.order_date, o.amount
FROM customers c
RIGHT JOIN orders o ON c.customer_id = o.customer_id;
 
 

3. 전체 외부조인 (FULL OUTER JOIN)

두 테이블의 모든 레코드를 반환합니다. 한 테이블에만 존재하는 레코드는 다른 테이블 부분이 NULL 값으로 채워집니다.

-- MySQL에서는 UNION으로 구현
SELECT c.customer_name, o.order_date, o.amount
FROM customers c LEFT JOIN orders o ON c.customer_id = o.customer_id
UNION
SELECT c.customer_name, o.order_date, o.amount
FROM customers c RIGHT JOIN orders o ON c.customer_id = o.customer_id;

 

JOIN 유형결과 데이터사용 목적
INNER 교집합만 정확히 매칭되는 데이터만 필요할 때
LEFT 왼쪽 모든 데이터 기준 테이블의 모든 데이터 + 관련 정보
RIGHT 오른쪽 모든 데이터 참조 테이블의 모든 데이터 + 관련 정보
FULL 양쪽 모든 데이터 누락 없이 모든 데이터 분석 시

 

교차조인 (CROSS JOIN)

 

두 개 이상의 테이블에서 가능한 모든 행의 조합을 생성하는 조인 방법입니다. 카르테시안 곱을 형성합니다.

-- 3개 색상 × 3개 사이즈 = 9개 조합 생성
SELECT c.color_name, s.size_name
FROM colors c
CROSS JOIN sizes s;
 
 
 

특징과 주의사항

  • 조건 없음: 두 테이블 간에 어떠한 조인 조건이 없을 때 사용
  • 결과 크기: 테이블A 행수 × 테이블B 행수
  • 성능 이슈: 결과가 매우 많은 데이터를 생성하기 때문에 성능이 좋지 않음
  • 사용 목적: POC나 테스팅 시 사용, 성능 저하로 인해 LIMIT를 걸기도 함

자연조인 (NATURAL JOIN)

 

두 테이블 간의 동일한 이름을 가진 모든 열을 기반으로 조인하는 SQL 조인 유형입니다. 명시적으로 조인 조건을 지정할 필요 없이, 두 테이블에서 이름이 같은 모든 열에 대해 내부 조인을 수행합니다.

-- 두 테이블 모두 'customer_id' 열을 가지고 있다면 자동 매칭
SELECT customer_name, order_date, amount
FROM customers
NATURAL JOIN orders;

-- 위는 아래와 동일한 결과
SELECT c.customer_name, o.order_date, o.amount
FROM customers c
INNER JOIN orders o ON c.customer_id = o.customer_id;
 

특징

  • 자동 매칭: 동일한 열 이름을 자동으로 찾아서 조인 조건으로 사용
  • 간편함: 조인 조건을 명시하지 않아도 됨
  • 성능: 교차 조인에 비해 훨씬 적은 수의 행을 반환하므로 성능이 더 좋음
  • 사용 목적: 간단하게 뭉뚱그려 데이터를 통합할 때 사용

'ZeroBase > CS' 카테고리의 다른 글

데이터베이스 트랜잭션 - ACID와 무결성  (0) 2025.09.28
데이터베이스(조인 알고리즘)  (0) 2025.09.25
ERD(Entity Relation Diagram)  (3) 2025.09.21
데이터베이스 관계와 키(Key)  (1) 2025.09.16
ENUM과 SET  (0) 2025.09.16