[SQL Study Log 03] JOIN문

Kuromi·2026년 2월 16일

SQL

목록 보기
3/7
post-thumbnail

🌸 SQL JOIN 공부 정리

SQL을 공부하면서 느낀 점은
SELECT보다 JOIN이 훨씬 중요하다는 것이다.

실무에서는 하나의 테이블만 조회하는 경우보다
여러 테이블을 연결해서 분석하는 경우가 훨씬 많기 때문이다.

1️⃣ JOIN이 필요한 이유

관계형 데이터베이스는 데이터를 한 곳에 다 저장하지 않는다.

예를 들어,

  • 고객 정보는 customers
  • 주문 정보는 orders

처럼 나눠 저장한다.

그래서 고객 이름과 주문 금액을 함께 보려면
두 테이블을 연결해야 한다.
이때 사용하는 것이 JOIN이다.

2️⃣ INNER JOIN 이해하기

가장 기본이 되는 JOIN이다.

SELECT c.name, o.amount
FROM customers c
JOIN orders o
    ON c.customer_id = o.customer_id;

공통 컬럼(customer_id)을 기준으로
두 테이블에 모두 존재하는 데이터만 조회한다.

처음에는 단순히 “교집합”이라고 외웠는데,
공부하면서 느낀 건

👉 ON 조건이 정확해야 데이터가 정확하게 연결된다는 점이다.

3️⃣ LEFT JOIN이 중요한 이유

SELECT c.name, o.amount
FROM customers c
LEFT JOIN orders o
    ON c.customer_id = o.customer_id;

왼쪽 테이블은 모두 유지된다.

주문이 없는 고객도 조회되며
이 경우 주문 컬럼은 NULL이 된다.

이걸 보면서 이해한 점은,

👉 LEFT JOIN은 “빠진 데이터 찾기”에 자주 쓰인다는 것.

예:

  • 주문하지 않은 고객
  • 활동하지 않은 사용자
  • 매칭 안 된 데이터 찾기

4️⃣ JOIN의 핵심은 관계 이해

처음엔 그냥 컬럼 같으면 조인한다고 생각했는데
공부하면서 PK / FK 개념이 더 중요하다는 걸 알게 됐다.

  • PK(Primary Key) → 테이블을 대표하는 값
  • FK(Foreign Key) → 다른 테이블을 참조하는 값

JOIN은 단순 연결이 아니라
테이블 관계를 기반으로 연결하는 작업이라는 걸 이해했다.

5️⃣ JOIN + GROUP BY

고객별 총 주문 금액을 구해보면서
JOIN 후 집계가 어떻게 동작하는지도 공부했다.

SELECT c.name,
       SUM(o.amount) AS total_amount
FROM customers c
JOIN orders o
    ON c.customer_id = o.customer_id
GROUP BY c.name;

실행 흐름을 생각해보면:

  1. 먼저 테이블을 JOIN
  2. 그 결과를 GROUP BY로 집계

이 순서를 이해하는 게 중요하다고 느꼈다.

6️⃣ 공부하면서 헷갈렸던 부분

LEFT JOIN 후 WHERE 조건을 잘못 쓰면
INNER JOIN처럼 동작할 수 있다는 점이 인상적이었다.

예를 들어:

LEFT JOIN orders o ON ...
WHERE o.amount > 0;

이 경우 NULL이 제거되기 때문에
결과적으로 매칭된 데이터만 남게 된다.

👉 JOIN 후 필터 조건의 위치도 중요하다는 걸 배웠다.

🌷 정리하면서 느낀 점

✔ 테이블 구조 이해
✔ 데이터 관계 이해
✔ 분석 설계 능력

profile
Code

0개의 댓글