CodeGym /행동 /SQL SELF /기본 INNER JOIN

기본 INNER JOIN

SQL SELF
레벨 11, 레슨 1
사용 가능

지난 강의에서 SQL에서 어떤 JOIN 타입들이 있는지 얘기했었지. 오늘은 INNER JOIN에 좀 더 집중해서 볼 거야.

INNER JOIN은 관계형 데이터베이스에서 데이터를 합치는 방식 중 하나인데, 두 테이블에서 "조건에 맞는" 행만 가져오는 거야. 즉, INNER JOIN은 두 테이블에서 겹치는 부분만 반환하고 나머지는 무시해.

상상해봐, 네가 상자 두 개를 가지고 있다고 치자. 한 상자엔 학생 카드가 있고, 다른 상자엔 학생들이 등록한 강좌 카드가 있어. 어떤 학생이 어떤 강좌에 등록했는지 알고 싶어. 만약 등록 안 한 학생이 있다면, 그건 지금 신경 안 써도 돼. 이런 상황이 바로 INNER JOIN에 딱 맞는 케이스야.

INNER JOIN 문법

문법은 꽤 직관적이야 — 합치고 싶은 두 테이블을 지정하고, ON 키워드로 조인 조건을 써주면 돼.

SELECT 컬럼들
FROM 테이블1 INNER JOIN 테이블2
ON 테이블1.필드 = 테이블2.필드;
  • 테이블1이랑 테이블2는 네가 합치고 싶은 테이블이야.
  • 필드는 매칭할 컬럼(열)이야.
  • ON 뒤에 오는 조건이 두 테이블에서 행을 어떻게 맞출지 정해주는 거야.

INNER JOIN 사용 예시

예시를 위해 두 개의 테이블을 쓸 거야:

students 테이블 — 학생 정보

student_id name age
1 Otto 20
2 Anna 22
3 Peter 19
4 Dia 21

enrollments 테이블 — 강좌 등록 정보

enrollment_id student_id course_id
101 1 501
102 2 502
103 2 503
104 3 504

참고, Dia 학생(student_id = 4)은 아무 강좌에도 등록 안 했어.

예시 1: 학생과 강좌 정보 가져오기

어떤 학생이 어떤 강좌에 등록했는지 알고 싶어. 이게 INNER JOIN의 전형적인 예시야. students랑 enrollments 테이블에서 student_id 기준으로 데이터가 겹치는 것만 신경 쓰면 돼.

SELECT students.name, enrollments.course_id
FROM students INNER JOIN enrollments
ON students.student_id = enrollments.student_id;

결과:

name course_id
Otto 501
Anna 502
Anna 503
Peter 504

어때? INNER JOIN은 강좌에 등록한 학생만 보여줘. Dia 학생은 아무 데도 등록 안 해서 결과에 안 나와.

예시 2: 주문과 고객 정보 가져오기

이번엔 다른 예시를 볼게. orders(주문)랑 customers(고객) 테이블이 있다고 치자. 모든 주문에 대해 고객 이름을 같이 보고 싶어.

orders 테이블

order_id customer_id amount
1 101 500
2 102 300
3 103 700

customers 테이블

customer_id name
101 Otto
102 Anna
104 Peter

문제: orders랑 customers를 customer_id로 조인해서, 고객이 있는 주문만 반환해야 해.

SELECT orders.order_id, customers.name, orders.amount
FROM orders INNER JOIN customers
ON orders.customer_id = customers.customer_id;

결과:

order_id name amount
1 Otto 500
2 Anna 300

여기서 order_id = 3인 주문은 결과에 없어. 왜냐면 customer_id = 103인 고객이 customers 테이블에 없으니까.

INNER JOIN으로 테이블을 합칠 때 (그리고 뭐가 잘못될 수 있는지)

INNER JOIN은 거의 모든 관계형 데이터베이스 프로젝트에서 기본적으로 쓰는 도구야. 공구함에 있는 스패너 같은 거지: 이거 없이도 할 수는 있지만, 훨씬 힘들어질걸. 예를 들면:

  • 여러 테이블에서 데이터 합쳐서 리포트 만들 때.
  • 분석할 때, 예를 들어 판매랑 고객 데이터 같이 볼 때.
  • 외부 시스템 데이터 통합할 때.

초보자들이 제일 많이 하는 실수는 ON을 빼먹거나 조인 조건을 잘못 쓰는 거야. 조건을 제대로 안 쓰면, 원하는 결과 대신 데카르트 곱이 나와 — 이건 수천, 수만 줄의 의미 없는 데이터가 될 수 있어.

실수 예시:

이 예시엔 조인 조건이 없어서, 두 테이블의 모든 행 조합이 만들어져 (이건 진짜 원하는 게 아닐 거야):

SELECT students.name, enrollments.course_id
FROM students, enrollments;  -- 오류: 조인 조건이 없음!

결과는 완전 혼돈이야: students의 각 행이 enrollments의 모든 행과 조합돼.

2
과제
SQL SELF, 레벨 11, 레슨 1
잠금
학생과 강좌의 간단한 조인
학생과 강좌의 간단한 조인
2
과제
SQL SELF, 레벨 11, 레슨 1
잠금
구매자와 그들의 주문 목록
구매자와 그들의 주문 목록
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION