본문 바로가기

DATA/SQL

RDB — 중복 없이 설계하고 JOIN 제대로 쓰는 법

1. RDB를 쓰는 이유

개념 한 줄 개념 효과

정규화 테이블을 주제별로 분리해 중복 제거 저장 공간 절감, 데이터 일관성 확보
테이블 분리 Users, Products, Orders 등 같은 정보 한 번만 수정하면 됨
무결성 제약 PK·FK로 참조 관계 명시 잘못된 데이터 삽입 차단

핵심 : “필요 이상으로 한 셀(칸)에 같은 정보가 두 번 들어가면 설계를 다시 본다.”


2. JOIN 기본기

leetcode - Rising Temperature 문제

INNER 두 테이블 모두에 있는 행만 교집합만 필요할 때
LEFT (OUTER) 왼쪽 전체 + 매칭 실패 시 NULL “행위가 없더라도 목록에 보여야” 할 때
SELF 같은 테이블을 두 번 불러 비교 날짜·계층·전일 대비 등 행 간 비교
-- SELF JOIN 예시: 어제보다 더운 날 찾기
SELECT today.id
FROM Weather AS today
JOIN  Weather AS yesterday
  ON DATE_ADD(yesterday.recordDate, INTERVAL 1 DAY) = today.recordDate
WHERE today.temperature > yesterday.temperature;

3. JOIN 작성 시 흔한 실수

실수 이유 해결

조인키 컬럼명이 다름 u.id ≠ o.user_id ON u.id = o.user_id 처럼 명시
날짜를 산술로 빼기 recordDate - 1 (불가) DATE_ADD, DATE_SUB 사용
조건을 WHERE에만 적음 ON 누락 → 카티시안 곱 JOIN 절에 명확히 연결

4. ERD가 꼭 필요한 이유

  1. 시각화 : 테이블·PK·FK·관계를 한눈에 본다.
  2. 조인 설계 가이드 : 어떤 컬럼이 연결점인지 바로 파악.
  3. 커뮤니케이션 : 개발·기획·디자인 팀 간 용어 혼선 최소화.

5. 치트 시트 — JOIN 선택법

요구사항 선택

양쪽 모두에 있는 데이터만 INNER
왼쪽 전체 + 오른쪽 매칭 여부 LEFT
같은 테이블 기준 행끼리 비교 SELF
오른쪽 전체가 기준 (거의 드뭄) RIGHT

6. 기억할 문장

  • 정규화로 중복을 없애고, JOIN으로 다시 엮는다.
  • INNER = 교집합, LEFT = 왼쪽 기준 전체, SELF = 한 테이블 두 번.
  • ERD를 먼저 그리면 조인 실수를 줄인다.

실제 스키마와 샘플 데이터를 만들어 직접 실행해 보면 이해가 훨씬 빠르다.

728x90