Ch.14 SQL 심화 + 풀스택 연결

JOIN — 테이블 연결하기

데이터 정규화의 필요성을 이해한다INNER JOIN으로 두 테이블의 교집합을 조회할 수 있다LEFT JOIN과 INNER JOIN의 차이를 설명할 수 있다

하나의 테이블에 모든 걸 넣으면 안 될까?

쇼핑몰 DB: 고객 정보, 주문 정보, 상품 정보를 하나의 테이블에 넣으면? 중복 데이터가 넘쳐납니다.

분리된 테이블의 데이터를 합쳐서 보려면?

JOIN — 서로 다른 테이블을 공통 키로 연결하여 하나의 결과로 합치는 SQL의 핵심 기능입니다.


article

핵심 내용

하나의 거대한 테이블은 중복과 비효율의 원인입니다

정규화(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
-- 이코드 | 노트북       | 1200000

FROM 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 마스터!

edit_note

정리 노트

JOIN — 테이블 연결하기 정리

데이터 정규화

정규화
데이터 중복을 줄이기 위해 테이블을 분리하는 설계 원칙
외래 키(FK)
다른 테이블의 기본 키를 참조하는 연결 고리
관계
1:1, 1:N(가장 흔함), N:M 세 가지 유형

JOIN 유형

INNER JOIN
양쪽 테이블에 모두 존재하는 행만 반환 (교집합)
LEFT JOIN
왼쪽 테이블 전체 + 오른쪽 매칭 (없으면 NULL)
RIGHT JOIN
오른쪽 테이블 전체 + 왼쪽 매칭 — LEFT JOIN 반대

JOIN은 분리된 테이블을 다시 하나로 합치는 SQL의 핵심 기능입니다.

image

시각 자료

다이어그램: wd-scene-sql-join
다이어그램: web-p22
check_circle

핵심 정리

  • 1정규화 = 테이블을 분리하여 중복 제거
  • 2INNER JOIN = 교집합 (양쪽 매칭되는 행만)
  • 3LEFT JOIN = 왼쪽 테이블 모두 유지 (미매칭 시 NULL)
  • 4ON 절로 매칭 조건 지정, 별칭으로 코드 간결하게

퀴즈와 인터랙션으로 더 깊이 학습하세요

play_circle인터랙티브 레슨 시작