대표님이 "최근 주문 현황을 고객 이름과 상품명을 포함해서 보고서로 만들어줘!"라고 요청했다고 가정하자.
우리는 앞서 쇼핑몰 운영에 필요한 users , products , orders 테이블을 만들고 데이터를 입력했다. 주문 현황이 필요하기 때문에 orders 의 정보를 제공하면 될 것 같다.
select * from orders;

- 대표님의 요구사항은 "최근 주문 현황을 고객 이름과 상품명을 포함해서 보고서로 만들어줘!"라는 것이었다. 그런데 orders 테이블에는 고객 이름과 상품명이 없다. 이 테이블만 보고서는 user_id가 1인 고객이 누구인지, product_id가 4인 상품이 무엇인지 즉시 알 수가 없다.
- 추가 과정이 필요하다.
- 고객 이름을 구하기 위해서는 users 테이블을 통해 user_id 에 해당하는 고객명을 하나하나 직접 찾아야 한다
- 상품명을 구하기 위해서는 products 테이블을 통해 product_id에 해당하는 상품명을 하나하나 직접 찾아야 한다.
데이터를 여러 테이블에 나누어 저장하는 이유
만약 모든 데이터가 한 곳에 저장된다면??


- 데이터 중복
- "션" 고객이 상품을 100번 주문했다고 생각해 보자. 그의 이름, 이메일, 주소 정보가 100번이나 불필요하게 반복 저장된다. 이건 매우 큰 저장 공간의 낭비다.
- 갱신 이상
- 만약 "션" 고객이 이메일 주소를 변경했다고 가정해 보자. 우리는 "션"이 주문한 100개의 주문 데이터를 모두 찾아서, 이메일 정보를 일일이 새로운 주소로 변경해야 한다.
- 만약 실수로 단 하나라도 누락한다면? 어떤 주문에서는 고객의 이메일이 예전 주소로, 다른 주문에서는 새 주소로 저장되어 데이터의 일관성이 깨져버린다. 어떤 정보가 진짜인지 믿을 수 없게 되는 것이다.
- 삽입 이상
- 우리 쇼핑몰에 아직 아무도 주문하지 않은 새로운 상품 '초경량 노트북'을 등록하고 싶다. 하지만 이 테이블 구조에서는 "주문"이 발생해야만 데이터를 추가할 수 있다. 주문한 사람이 없으니, 상품 정보조차 등록할 수 없는 말도 안 되는 상황이 발생한다.
- 삭제 이상
- "이순신" 고객이 딱 한 번 주문한 기록이 있다고 하자. 만약 회사 정책상 이 주문 기록을 삭제해야 한다면 어떻게 될까?
- 주문 데이터를 삭제하는 순간, '이순신' 고객의 이름, 이메일, 주소 정보까지 데이터베이스에서 영원히 사라져 버릴 수 있다. 우리는 단지 주문 내역 하나를 지웠을 뿐인데, 소중한 고객 정보까지 잃게 되는 것이다.
이러한 문제들 때문에 우리는 데이터베이스를 설계할 때 정규화(Normalization)라는 과정을 거친다. 정규화는 데이터의 중복을 최소화하고, 데이터의 일관성을 해치는 '이상 현상'들을 방지하기 위해 데이터를 논리적인 단위로 분리하는 과정이다. 우리가 "users", "products" , "orders"로 테이블을 나눈 것이 바로 이 정규화의 결과물이다.
조인이 필요한 이유
잘 관리하기 위해 흩어놓은 데이터에서 의미 있는 정보를 얻으려면, 이 흩어진 조각들을 다시 합쳐야만 한다. "어떤 고객이 어떤 상품을 주문했는지"와 같은 통합된 보고서를 만들기 위해, 분리된 테이블들을 다시 연결해야 하는 것이다.
이때 사용하는 기술이 바로 조인(JOIN)이다.
- 조인은 두 개 이상의 테이블을 특정 컬럼을 기준으로 연결하여, 마치 처음부터 하나의 테이블이었던 것처럼 보여주는 기능이다.
- 보통 테이블을 설계할 때 연결고리로 사용하는 "기본 키(Primary Key)"와 "외래 키(Foreign Key)"를 사용해 이들을 합친다.
조인은 데이터 정규화(분리)를 통해 얻는 일관성과 효율성의 장점은 그대로 유지하면서, 우리가 원하는 통합된 정보를 얻을 수 있게 해주는, 데이터 분리와 통합을 완성하는 기술이다.
'데이터 베이스 > 데이터베이스 기본' 카테고리의 다른 글
| Ch04. UNION - UNION (0) | 2026.05.31 |
|---|---|
| Ch03. 서브쿼리 - 서브쿼리 VS Join (0) | 2026.05.30 |
| Ch01. 내부 조인 - 내부 조인(3) (0) | 2026.05.24 |
| Ch01. 내부 조인 - 내부 조인(2) (0) | 2026.05.24 |
| Ch01. 내부 조인 - 내부 조인(1) (0) | 2026.05.24 |