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가 꼭 필요한 이유
- 시각화 : 테이블·PK·FK·관계를 한눈에 본다.
- 조인 설계 가이드 : 어떤 컬럼이 연결점인지 바로 파악.
- 커뮤니케이션 : 개발·기획·디자인 팀 간 용어 혼선 최소화.
5. 치트 시트 — JOIN 선택법
요구사항 선택
양쪽 모두에 있는 데이터만 | INNER |
왼쪽 전체 + 오른쪽 매칭 여부 | LEFT |
같은 테이블 기준 행끼리 비교 | SELF |
오른쪽 전체가 기준 (거의 드뭄) | RIGHT |
6. 기억할 문장
- 정규화로 중복을 없애고, JOIN으로 다시 엮는다.
- INNER = 교집합, LEFT = 왼쪽 기준 전체, SELF = 한 테이블 두 번.
- ERD를 먼저 그리면 조인 실수를 줄인다.
실제 스키마와 샘플 데이터를 만들어 직접 실행해 보면 이해가 훨씬 빠르다.
728x90
'DATA > SQL' 카테고리의 다른 글
[데이터리안 중급sql] CASE WHEN (0) | 2025.05.22 |
---|---|
[해커랭크] Top Earners - Group by (0) | 2025.05.20 |
해커랭크 Revising Aggregations - Averages 외 5문제 (0) | 2025.05.16 |
MySQL : WorkBench PK 설정 및 Table 구조 (0) | 2025.02.10 |