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 |