티스토리 뷰

300x250

SQL JOIN 완벽 정리, INNER JOIN·LEFT JOIN·RIGHT JOIN 차이 한 번에 이해하기

SQL을 공부할 때 많은 분들이 처음 크게 헷갈리는 지점이 바로 JOIN입니다. 특히 INNER JOIN, LEFT JOIN, RIGHT JOIN은 이름은 비슷한데 실제 결과는 다르게 나오기 때문에, 문법만 외우면 금방 섞이기 쉽습니다.

그런데 JOIN은 생각보다 어렵게 볼 필요가 없습니다. 핵심은 단 하나입니다.

먼저 핵심부터
INNER JOIN양쪽에 모두 있는 데이터만 가져옵니다.
LEFT JOIN왼쪽 테이블은 전부 유지하고, 오른쪽은 맞는 것만 붙입니다.
RIGHT JOIN오른쪽 테이블은 전부 유지하고, 왼쪽은 맞는 것만 붙입니다.

이번 글에서는 JOIN이 왜 필요한지부터 시작해서, INNER JOIN, LEFT JOIN, RIGHT JOIN 차이와 실무에서 자주 헷갈리는 포인트까지 한 번에 정리해보겠습니다.

JOIN은 왜 필요할까?
관계형 데이터베이스는 데이터를 한 테이블에 몰아넣기보다 나눠서 저장하는 경우가 많습니다.

예를 들어 회원 정보는 users 테이블에, 주문 정보는 orders 테이블에 저장할 수 있습니다.

users
+----+--------+
| id | name   |
+----+--------+
| 1  | Kim    |
| 2  | Lee    |
| 3  | Park   |
+----+--------+
orders
+----+---------+-----------+
| id | user_id | product   |
+----+---------+-----------+
| 1  | 1       | MacBook   |
| 2  | 1       | iPhone    |
| 3  | 2       | Monitor   |
| 4  | 4       | Keyboard  |
+----+---------+-----------+

이 상태에서 “누가 어떤 상품을 주문했는지” 보려면 두 테이블을 연결해야 합니다. 바로 이럴 때 JOIN을 사용합니다.

한 줄로 보면
JOIN은 둘 이상의 테이블을 공통 컬럼으로 연결해서 한 번에 조회하는 방법입니다.
728x90
INNER JOIN은 무엇일까?
가장 기본이 되는 JOIN입니다. 양쪽에 모두 존재하는 데이터만 남깁니다.

INNER JOIN은 두 테이블에서 조건이 일치하는 데이터만 가져옵니다.

SELECT u.name, o.product
FROM users u
INNER JOIN orders o
  ON u.id = o.user_id;

결과는 이렇게 됩니다.

+------+---------+
| name | product |
+------+---------+
| Kim  | MacBook |
| Kim  | iPhone  |
| Lee  | Monitor |
+------+---------+

여기서 Park는 주문이 없기 때문에 빠지고, user_id = 4 주문도 users 테이블에 일치하는 회원이 없으므로 빠집니다.

INNER JOIN 핵심
양쪽 테이블에 모두 있는 데이터만 조회합니다. 즉, 교집합 개념으로 보면 이해가 가장 쉽습니다.
LEFT JOIN은 무엇일까?
왼쪽 테이블을 기준으로 모두 남기고, 오른쪽에서 맞는 데이터만 붙입니다.

LEFT JOIN왼쪽 테이블의 데이터는 전부 유지합니다. 그리고 오른쪽 테이블에서 매칭되는 데이터만 붙입니다.

SELECT u.name, o.product
FROM users u
LEFT JOIN orders o
  ON u.id = o.user_id;

결과는 이렇게 됩니다.

+------+---------+
| name | product |
+------+---------+
| Kim  | MacBook |
| Kim  | iPhone  |
| Lee  | Monitor |
| Park | NULL    |
+------+---------+

Park는 주문이 없어도 왼쪽 테이블인 users에 있기 때문에 결과에 남습니다. 대신 주문 정보가 없으니 productNULL이 됩니다.

LEFT JOIN 핵심
왼쪽 테이블은 무조건 다 나온다고 기억하면 됩니다. 오른쪽에 없으면 NULL로 채워집니다.
RIGHT JOIN은 무엇일까?
LEFT JOIN과 반대 방향입니다. 오른쪽 테이블을 기준으로 모두 남깁니다.

RIGHT JOIN오른쪽 테이블의 데이터는 전부 유지합니다.

SELECT u.name, o.product
FROM users u
RIGHT JOIN orders o
  ON u.id = o.user_id;

결과는 이렇게 됩니다.

+------+----------+
| name | product  |
+------+----------+
| Kim  | MacBook  |
| Kim  | iPhone   |
| Lee  | Monitor  |
| NULL | Keyboard |
+------+----------+

이번에는 orders 테이블이 기준이므로, user_id = 4에 해당하는 Keyboard 주문도 결과에 포함됩니다. 다만 매칭되는 회원이 없기 때문에 nameNULL입니다.

RIGHT JOIN 핵심
오른쪽 테이블을 기준으로 모두 남긴다는 점만 기억하면 됩니다. 매칭이 없으면 반대쪽 컬럼은 NULL로 나옵니다.
INNER, LEFT, RIGHT 차이를 한 번에 보면?
JOIN은 결국 어떤 쪽 데이터를 반드시 남길지의 차이입니다.
JOIN 종류 기준 결과 특징
INNER JOIN 양쪽 모두 일치하는 데이터만 교집합만 남음
LEFT JOIN 왼쪽 테이블은 모두 유지 오른쪽이 없으면 NULL
RIGHT JOIN 오른쪽 테이블은 모두 유지 왼쪽이 없으면 NULL
정말 중요한 기준
JOIN이 헷갈릴 때는 "어느 쪽 테이블을 반드시 남길 것인가?"만 먼저 생각하면 됩니다.
JOIN을 그림처럼 이해하는 방법
벤다이어그램 느낌으로 생각하면 암기보다 훨씬 오래 갑니다.
INNER JOIN
겹치는 부분만 선택
LEFT JOIN
왼쪽 전체 + 겹치는 오른쪽
RIGHT JOIN
오른쪽 전체 + 겹치는 왼쪽
실무에서는 어떤 JOIN을 더 많이 쓸까?
실무에서는 JOIN 문법보다 데이터 관점이 더 중요합니다.

실무에서는 보통 다음 흐름으로 많이 사용합니다.

  • INNER JOIN: 연관 데이터가 반드시 있어야 할 때
  • LEFT JOIN: 기준 테이블은 모두 보여주고 싶을 때
  • RIGHT JOIN: 가능은 하지만 보통 LEFT JOIN으로 방향을 바꿔서 더 많이 작성

특히 실무에서는 RIGHT JOIN보다는 테이블 순서를 바꾼 LEFT JOIN을 더 선호하는 경우가 많습니다. 읽기 편하고 쿼리 의도가 더 직관적으로 보이기 때문입니다.

실무 팁
RIGHT JOIN이 보이면 틀린 것은 아니지만, LEFT JOIN으로 다시 바꿔서 읽어보면 더 이해하기 쉬운 경우가 많습니다.
JOIN에서 자주 헷갈리는 포인트
문법보다 결과를 먼저 떠올리면 실수가 줄어듭니다.

1) LEFT JOIN인데 WHERE 조건 때문에 INNER JOIN처럼 되는 경우

SELECT u.name, o.product
FROM users u
LEFT JOIN orders o
  ON u.id = o.user_id
WHERE o.product = 'MacBook';

이 쿼리는 LEFT JOIN처럼 보여도, WHERE o.product = 'MacBook' 조건 때문에 o.productNULL인 행이 제거됩니다. 그래서 결과적으로 INNER JOIN처럼 보일 수 있습니다.

2) JOIN 조건은 ON에, 필터 조건은 WHERE에 넣는 기준이 중요함

JOIN 기준과 조회 필터는 분리해서 생각하는 습관이 필요합니다.

3) 1:N 관계에서는 결과 행이 늘어날 수 있음

회원 1명이 주문 2개를 하면 회원 정보가 2번 반복되어 보이는 것이 정상입니다.

주의할 점
LEFT JOIN이라고 해서 항상 왼쪽 데이터가 다 보이는 것은 아닙니다.
이후 `WHERE` 조건을 어떻게 거느냐에 따라 결과가 달라질 수 있습니다.
마무리 정리
SQL JOIN은 결국 여러 테이블을 연결해서 한 번에 조회하기 위한 기능입니다. 그리고 `INNER`, `LEFT`, `RIGHT`의 차이는 복잡한 문법 차이보다 어느 쪽 데이터를 반드시 남길지의 차이로 이해하는 것이 가장 쉽습니다.
INNER JOIN = 양쪽에 모두 있는 데이터만
LEFT JOIN = 왼쪽은 모두 유지
RIGHT JOIN = 오른쪽은 모두 유지
핵심 기준 = 어느 테이블을 기준으로 남길 것인가

초보 단계에서는 우선 이렇게 기억하면 충분합니다.

INNER JOIN은 겹치는 것만, LEFT JOIN은 왼쪽 전체, RIGHT JOIN은 오른쪽 전체입니다.
728x90
댓글
반응형
최근에 올라온 글
글 보관함
«   2026/04   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30