CodeGym /행동 /SQL SELF /데이터 조인의 소개: JOIN

데이터 조인의 소개: JOIN

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

오늘은 관계형 데이터베이스에서 제일 흥미로운 주제 중 하나로 넘어갈 거야 — 여러 테이블에서 데이터를 합치는 JOIN 사용법! 이건 진짜 강력한 도구라서, 복잡한 관계랑 분석을 할 수 있게 해줘.

네 데이터베이스를 거대한 만화책이라고 생각해봐. 각각의 따로 있는 테이블이 만화의 한 컷이야. 전체 스토리를 만들려면 이 컷들을 이어야 하잖아? 그걸 JOIN이 도와주는 거지. 데이터 조인은 여러 테이블에서 정보를 뽑아서, 정해진 조건으로 연결해주는 과정이야.

관계형 데이터베이스는 테이블 간의 관계라는 개념을 중심으로 만들어졌어. 각 테이블은 어떤 엔터티에 대한 정보를 저장하고, 더 완벽한 그림을 보려면 여러 테이블의 데이터를 연결하고 싶을 때가 많아. 예를 들어:

  • students 테이블에는 학생 목록이 있어.
  • courses 테이블에는 강좌 목록이 들어있고.
  • enrollments 테이블은 누가 어떤 강좌 듣는지 보여줘.

어떤 학생이 어떤 강좌를 듣는지 알고 싶으면, 이 테이블들을 연결해야 해. 면접 볼 때 JOIN 잘 다루는 개발자는 진짜 멋져 보여. 데이터 다루는 데 제일 많이 쓰이는 스킬 중 하나거든.

기본적인 조인 종류

PostgreSQL에는 여러 가지 JOIN이 있는데, 각각 특정 상황에 맞게 쓰여. 복잡한 예시로 머리 아프기 전에, 일단 전체적으로 한번 볼게:

JOIN 타입 설명
INNER JOIN 양쪽 테이블에 모두 일치하는 행만 반환해.
LEFT JOIN 왼쪽 테이블의 모든 행과, 오른쪽 테이블에서 일치하는 것만 반환해.
RIGHT JOIN 오른쪽 테이블의 모든 행과, 왼쪽 테이블에서 일치하는 것만 반환해.
FULL OUTER JOIN 양쪽 테이블의 모든 행을 반환하고, 일치하지 않는 부분은 NULL로 채워져.

어떤 JOIN을 쓸지는 네가 뭘 하고 싶은지에 따라 달라:

  • 양쪽 테이블에서 일치하는 데이터만 필요하면 INNER JOIN을 써.
  • 한쪽 테이블의 모든 데이터는 남기고, 다른 쪽은 일치하는 것만 원하면 LEFT JOIN이나 RIGHT JOIN이 좋아.
  • 양쪽 테이블의 모든 데이터가 필요하면, 일치하지 않아도 FULL OUTER JOIN을 써.

이제 실제로 이런 조인들을 어떻게 쓰는지 바로 연습해보자.

예제 문제 — "누가 어떤 강좌 듣고 있어?"

예를 들어, 우리한테 세 개의 테이블이 있다고 해보자:

students 테이블

id name
1 Otto
2 Anna
3 Peter

courses 테이블

id title
101 수학
102 영어

enrollments 테이블

student_id course_id
1 101
2 102

이 테이블들은 이렇게 연결돼 있어:

  • studentsid 필드는 학생의 고유 식별자야.
  • coursesid 필드는 강좌의 고유 식별자야.
  • enrollments 테이블의 student_idcourse_id 컬럼이 학생과 강좌를 연결해줘.

이제 이런 질문이 있다고 해보자: 어떤 학생이 어떤 강좌에 등록되어 있을까?

이건 JOIN으로 답을 구할 수 있어. 테이블들을 관계에 따라 연결하면 돼:

  • studentsenrollmentsid = student_id로 연결해.
  • enrollmentscoursescourse_id = id로 연결해.

SQL 쿼리는 이렇게 생겼어:

SELECT students.name, courses.title
FROM enrollments
JOIN students ON enrollments.student_id = students.id
JOIN courses ON enrollments.course_id = courses.id;

이 쿼리가 하는 일:

  • FROM enrollments — 학생과 강좌를 연결하는 테이블에서 시작해.
  • JOIN students ON enrollments.student_id = students.id — 학생을 붙여서 이름을 가져와.
  • JOIN courses ON enrollments.course_id = courses.id — 강좌를 붙여서 강좌명을 가져와.

결과는 이렇게 나와:

name title
Otto 수학
Anna 영어

참고: 학생이 강좌에 하나도 등록 안 했으면 결과에 안 나와 — 왜냐면 JOIN은 기본적으로 엄격한 (INNER JOIN) 방식이거든. 나중에 LEFT JOIN으로 그런 학생도 포함하는 방법 알려줄게.

이 쿼리가 아직 잘 이해 안 돼도 걱정 마! 천천히 익히는 게 다음 강의의 목표야!

실생활에서 왜 필요할까?

이제 테이블을 어떻게 연결하는지 알았으니까, 현실 세계 얘기도 해보자. 인터넷 쇼핑몰이 어떻게 동작하는지 궁금했던 적 있어? 예를 들어, 스마트폰을 고를 때 다른 사람들이 남긴 리뷰를 볼 수 있잖아.

  1. products 테이블에는 상품 정보가 있어.
  2. reviews 테이블에는 구매자 리뷰가 들어있고.
  3. customers 테이블에는 구매자 정보가 있어.

사이트에서 리뷰를 보여주려면 products, reviews, customers 테이블을 합쳐야 해. 이게 바로 JOIN이 실제로 쓰이는 거지.

뭐에 주의해야 할까?

다음 강의에서 JOIN을 더 깊게 들어가기 전에, 꼭 기억해야 할 몇 가지가 있어:

  1. JOIN에서 순서가 중요해. 예를 들어, LEFT JOIN은 왼쪽 테이블의 행을 반환하니까, 순서를 바꾸면 결과도 달라져.
  2. 작은 테이블로 연습해. 처음엔 수백만 행짜리 쿼리는 피하는 게 좋아. 제일 간단한 쿼리도 이해하기 쉬워야 하니까.
  3. 관계에 익숙해져. 테이블을 하나의 큰 구조의 일부로 생각하는 게 익숙해지면, JOIN 쓰는 게 자연스러워질 거야.

오늘부터 우리 SQL 전문가로 변신 시작이야. 다음 강의에서는 INNER JOIN을 써서 두 테이블에서 데이터 뽑는 법을 배울 거야. PostgreSQL 공부에서 진짜 중요한 한 걸음이 될 거야.

2
과제
SQL SELF, 레벨 11, 레슨 0
잠금
COALESCE를 사용해서 문자열에서 NULL 처리하기
COALESCE를 사용해서 문자열에서 NULL 처리하기
2
과제
SQL SELF, 레벨 11, 레슨 0
잠금
조건부 및 NULL 처리로 평균 가격 계산하기
조건부 및 NULL 처리로 평균 가격 계산하기
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION