본문 바로가기
프로그래밍/MySQL

📊 [SQL 프로젝트] 제23장 INNER JOIN - 두 테이블을 연결해 봅시다.

by 강릉바다의 블로그 2026. 7. 6.

제2부 여러 테이블을 연결하는 SQL

제23장 INNER JOIN - 두 테이블을 연결해 봅시다.


📚 JOIN 학습 시리즈

① 왜 JOIN이 필요할까요?
② INNER JOIN   ← 현재
③ 관계를 따라 JOIN하기
④ 여러 테이블 JOIN
⑤ LEFT JOIN
⑥ RIGHT JOIN
⑦ SELF JOIN

오늘의 질문

지난 시간에 우리는

"고객이 주문한 상품"

을 조회하려면

여러 테이블을 연결해야 한다는 것을 배웠습니다.

이번에는 조금 쉬운 문제부터 시작해 보겠습니다.

팀장님이 말합니다.

"주문번호와 고객 이름을 함께 출력해 주세요."

 

잠시 생각해 봅시다.

주문번호는

어느 테이블에 있을까요?

→ Orders

고객 이름은

어느 테이블에 있을까요?

→ Customers

즉,

이번에는

두 개의 테이블을 함께 읽어야 합니다.


학습 목표

이번 장을 학습하면

  • INNER JOIN의 역할을 설명할 수 있다.
  • 두 개의 테이블을 연결할 수 있다.
  • ON 절이 왜 필요한지 이해할 수 있다.
  • 가장 기본적인 JOIN을 작성할 수 있다.

23-1. 먼저 테이블을 살펴봅시다.

Customers 테이블

CustomerID CustomerName
ALFKI Alfreds Futterkiste
ANATR Ana Trujillo
ANTON Around the Horn

Orders 테이블

OrderID CustomerID
10248 VINET
10249 TOMSP
10250 HANAR
10251 VICTE

여기서 중요한 것은

CustomerID

입니다.

두 테이블 모두

CustomerID를 가지고 있습니다.

바로 이것이

두 테이블을 연결하는 열쇠입니다.


잠깐 생각해 보기

만약

Customers에

ANTON

이 있고,

Orders에도

ANTON

이 있다면,

이 둘은 같은 고객을 의미합니다.

즉,

공통된 값을 이용하여 연결할 수 있습니다.


23-2. 그런데 어떻게 연결할까요?

일반적으로 가장 많이 하는 생각입니다.

"그냥 JOIN 하면 되지 않을까요?"

 

예를 들어

SELECT *
FROM Customers
JOIN Orders;

이렇게 작성하면 될까요?

아닙니다.

SQL은

무엇을 기준으로 연결해야 하는지

모릅니다.

예를 들어

Customers에는

  • CustomerID
  • CustomerName
  • Country

등이 있습니다.

Orders에도

  • OrderID
  • CustomerID
  • EmployeeID

등이 있습니다.

SQL은

어떤 열이 같은 것인지

알 수 없습니다.

그래서

우리가 알려 주어야 합니다.


이것이 바로 ON입니다.

ON은

SQL에게

"이 열을 기준으로 연결하세요."

라고 알려 주는 역할을 합니다.

즉,

ON
↓
연결 기준

입니다.


그림으로 이해하기

Customers
CustomerID
      │
      │
      ▼
CustomerID
Orders

같은 CustomerID끼리 연결합니다.


23-3. 이제 INNER JOIN을 작성해 봅시다.

SELECT CustomerName,
       OrderID
FROM Customers
INNER JOIN Orders
ON Customers.CustomerID = Orders.CustomerID;

실행 결과(예)

CustomerName OrderID
Around the Horn 10355
Around the Horn 10383
Around the Horn 10453
... ...

고객 이름과

주문번호가

하나의 결과로 출력되었습니다.


SQL을 한 줄씩 읽어 보기

SELECT CustomerName,
       OrderID

출력할 열을 선택합니다.


FROM Customers

Customers 테이블부터 읽습니다.


INNER JOIN Orders

Orders 테이블을 함께 읽습니다.


ON Customers.CustomerID = Orders.CustomerID

CustomerID가 같은 행끼리 연결합니다.


즉,

CustomerID가 같은 고객과 주문을 하나의 결과로 보여 주세요.

라는 의미입니다.


잠깐!

INNER는 무슨 뜻일까요?

INNER JOIN은

양쪽 테이블에 모두 존재하는 데이터만 연결합니다.

예를 들어

Customers

A
B
C

Orders

B
C
D

이면

결과는

B
C

만 출력됩니다.

이것이

INNER(공통 부분)입니다.

(LEFT JOIN에서 다시 자세히 배우겠습니다.)


💡 잠깐! 이것도 알아두세요

INNER는 생략할 수도 있습니다.

다음 두 SQL은

완전히 같습니다.

FROM Customers
INNER JOIN Orders
FROM Customers
JOIN Orders

실무에서도 둘 다 많이 사용합니다.

다만,

초보자는

INNER JOIN을 모두 쓰는 것이

의미를 이해하기 쉽습니다.


자주 하는 실수

① ON을 빼먹는다.

SELECT *
FROM Customers
INNER JOIN Orders;

무엇을 기준으로 연결해야 하는지

알 수 없습니다.


② 잘못된 열을 연결한다.

예를 들어

ON Customers.CustomerName = Orders.CustomerID

처럼

관계없는 열을 연결하면

원하는 결과가 나오지 않습니다.


③ JOIN은 테이블을 합치는 기능이라고 생각한다.

JOIN은

조회 결과만 연결합니다.

원래 테이블은

전혀 변경되지 않습니다.


④ INNER JOIN이 모든 데이터를 출력한다고 생각한다.

INNER JOIN은

공통된 데이터만 출력합니다.

이 부분은

LEFT JOIN에서 다시 비교해 보겠습니다.


실무에서는 어떻게 사용할까요?

회사에서는 INNER JOIN을 사용하여

  • 고객 이름과 주문번호 조회
  • 주문과 상품 연결
  • 상품과 공급업체 연결
  • 직원과 주문 연결

등을 매우 자주 수행합니다.

실제로 SQL 업무의 대부분은

INNER JOIN으로 시작한다고 해도 과언이 아닙니다.


실습

실습 1

고객 이름과 주문번호를 조회하세요.

SELECT CustomerName,
       OrderID
FROM Customers
INNER JOIN Orders
ON Customers.CustomerID = Orders.CustomerID;

실습 2

고객 이름과 주문 날짜를 조회하세요.

SELECT CustomerName,
       OrderDate
FROM Customers
INNER JOIN Orders
ON Customers.CustomerID = Orders.CustomerID;

실습 3

모든 열을 출력하여

JOIN 결과를 확인해 보세요.

SELECT *
FROM Customers
INNER JOIN Orders
ON Customers.CustomerID = Orders.CustomerID;

실무 미션

여러분은 영업팀 직원입니다.

팀장님이 다음과 같이 요청했습니다.

"주문번호, 고객 이름, 주문 날짜를 함께 출력해 주세요."

 

다음 항목을 출력하는 SQL을 작성하세요.

  • OrderID
  • CustomerName
  • OrderDate

힌트)

Customers와 Orders를 INNER JOIN으로 연결합니다.


핵심 정리

✔ INNER JOIN은 두 테이블을 연결하는 가장 기본적인 JOIN이다.

✔ ON은 어떤 열을 기준으로 연결할지 지정하는 절이다.

✔ 공통된 값을 가진 행만 결과에 포함된다.

✔ INNER는 생략할 수 있지만, 초보자는 의미를 이해하기 위해 함께 작성하는 것이 좋다.


연습 문제

기본 문제

  1. INNER JOIN의 역할을 설명하세요.
  2. ON 절이 필요한 이유를 설명하세요.
  3. INNER JOIN과 JOIN의 차이를 설명하세요.

응용 문제

  1. Customers와 Orders를 연결하여 고객 이름과 주문번호를 조회하는 SQL을 작성하세요.
  2. 고객 이름과 주문 날짜를 조회하는 SQL을 작성하세요.
  3. SELECT *를 사용하여 JOIN 결과를 확인하는 SQL을 작성하세요.

도전 문제

다음 SQL에서 잘못된 부분을 찾아 수정해 보세요.

SELECT CustomerName,
       OrderID
FROM Customers
INNER JOIN Orders;

다음 장 예고

이번 장에서는 두 개의 테이블를 연결하는 방법을 배웠습니다.

하지만 실제 데이터베이스는 두 개의 테이블만 연결해서 끝나지 않습니다.

예를 들어 "고객이 주문한 상품 이름"을 조회하려면 Customers와 Orders만으로는 부족합니다. 주문 상세(OrderDetails)와 상품(Products)까지 차례대로 연결해야 합니다.

다음 장에서는 관계(Relationship)를 따라 여러 테이블을 연결하는 방법을 배우겠습니다. 여기서 학생들은 "JOIN은 암기하는 문법이 아니라, 관계도를 따라가는 과정"이라는 사실을 자연스럽게 이해하게 될 것입니다.