Ch.14 SQL 심화 + 풀스택 연결
JOIN — 테이블 연결하기
하나의 테이블에 모든 걸 넣으면 안 될까?
쇼핑몰 DB: 고객 정보, 주문 정보, 상품 정보를 하나의 테이블에 넣으면? 중복 데이터가 넘쳐납니다.
분리된 테이블의 데이터를 합쳐서 보려면?
JOIN — 서로 다른 테이블을 공통 키로 연결하여 하나의 결과로 합치는 SQL의 핵심 기능입니다.
핵심 내용
하나의 거대한 테이블은 중복과 비효율의 원인입니다
정규화(Normalization) = 중복 제거 데이터를 여러 테이블로 분리하여 중복을 최소화하는 설계 원칙. 수정 시 한 곳만 바꾸면 되므로 일관성이 유지됩니다.
INNER JOIN — 두 테이블에서 매칭되는 행만 합칩니다
-- users 테이블과 orders 테이블을 연결
SELECT users.name, orders.product_name, orders.amount
FROM users
INNER JOIN orders ON users.id = orders.user_id;
-- 결과: 주문이 있는 사용자만 표시
-- name | product_name | amount
-- 김짓 | 노트북 | 1200000
-- 김짓 | 마우스 | 35000
-- 이코드 | 노트북 | 1200000FROM users: 기준 테이블 선택
INNER JOIN orders: 결합할 테이블 지정
ON users.id = orders.user_id: 매칭 조건 (공통 키)
결과: 양쪽 모두에 존재하는 행만 출력
INNER JOIN = 교집합 양쪽 테이블 모두에 매칭되는 행만 결과에 포함됩니다. 주문이 없는 사용자, 사용자가 삭제된 주문은 제외됩니다.
LEFT JOIN — 왼쪽 테이블의 모든 행을 유지합니다
-- LEFT JOIN: 주문이 없는 사용자도 포함
SELECT users.name, orders.product_name
FROM users
LEFT JOIN orders ON users.id = orders.user_id;
-- 결과: 모든 사용자 표시 (주문 없으면 NULL)
-- name | product_name
-- 김짓 | 노트북
-- 김짓 | 마우스
-- 이코드 | 노트북
-- 박웹 | NULL ← 주문 없음NULL — 값이 없음을 나타내는 특수한 값. LEFT JOIN에서 매칭되지 않은 행의 오른쪽 테이블 값은 NULL이 됩니다. NULL 확인: `WHERE 열 IS NULL` 또는 `IS NOT NULL`
3개 테이블을 JOIN하여 주문 상세 내역을 조회합니다
-- 3개 테이블 JOIN: users + orders + products
SELECT
u.name AS 고객명,
p.name AS 상품명,
p.price AS 가격,
o.quantity AS 수량,
(p.price * o.quantity) AS 총액
FROM orders o
INNER JOIN users u ON o.user_id = u.id
INNER JOIN products p ON o.product_id = p.id
ORDER BY 총액 DESC;별칭(Alias) 활용 팁 `FROM users u` — users 테이블을 u로 축약 `u.name` 처럼 짧게 참조 가능 여러 테이블을 JOIN할 때 코드가 훨씬 깔끔해집니다.
양쪽 테이블 모두에 매칭되는 행만 반환하는 JOIN은?
LEFT JOIN에서 매칭되지 않는 오른쪽 테이블의 값은 0이 된다
두 테이블을 연결하는 매칭 조건 키워드: JOIN orders ___ users.id = orders.user_id
JOIN 마스터!
정리 노트
JOIN — 테이블 연결하기 정리
데이터 정규화
- 정규화
- 데이터 중복을 줄이기 위해 테이블을 분리하는 설계 원칙
- 외래 키(FK)
- 다른 테이블의 기본 키를 참조하는 연결 고리
- 관계
- 1:1, 1:N(가장 흔함), N:M 세 가지 유형
JOIN 유형
- INNER JOIN
- 양쪽 테이블에 모두 존재하는 행만 반환 (교집합)
- LEFT JOIN
- 왼쪽 테이블 전체 + 오른쪽 매칭 (없으면 NULL)
- RIGHT JOIN
- 오른쪽 테이블 전체 + 왼쪽 매칭 — LEFT JOIN 반대
JOIN은 분리된 테이블을 다시 하나로 합치는 SQL의 핵심 기능입니다.
시각 자료
핵심 정리
- 1정규화 = 테이블을 분리하여 중복 제거
- 2INNER JOIN = 교집합 (양쪽 매칭되는 행만)
- 3LEFT JOIN = 왼쪽 테이블 모두 유지 (미매칭 시 NULL)
- 4ON 절로 매칭 조건 지정, 별칭으로 코드 간결하게
퀴즈와 인터랙션으로 더 깊이 학습하세요
play_circle인터랙티브 레슨 시작