엑셀 VLOOKUP 지옥 탈출! SQL JOIN으로 흩어진 데이터 1초 만에 합치기

2025. 12. 27. 11:20SQL

반응형

엑셀 작업을 하다 보면 데이터가 여러 시트에 흩어져 있는 경우가 많다.
'주문 내역'에는 상품 ID만 있고, 진짜 '상품명'을 보려면 '상품 목록' 시트를 찾아봐야 하는 식이다.

이때 쓰는 게 그 유명한 VLOOKUP 함수인데, 데이터가 많아지면 엑셀이 엄청나게 느려지고 #N/A 에러가 뜨기 일쑤다.
"아, 이거 그냥 한 표에 다 합쳐져 있으면 안 되나?" 🤯

오늘은 SQL의 꽃이자 엑셀 VLOOKUP의 완벽한 상위 호환인 JOIN(테이블 합치기)을 실습했다.
흩어져 있는 정보들을 레고 블록처럼 딱딱 조립하는 쾌감이 있었다.

 

1. 연결고리(Key) 찾기: 조립의 기초

테이블을 합치려면 두 테이블이 공통으로 가지고 있는 '연결고리'가 필요하다.
영화 정보가 담긴 film 테이블과 언어 정보가 담긴 language 테이블을 합쳐보자.

SELECT * FROM film LIMIT 5;
SELECT * FROM language;

두 테이블을 열어보니 language_id라는 컬럼이 양쪽에 똑같이 있다. 찾았다, 연결고리! 🔑

 

2. 교집합 구하기 (INNER JOIN)

가장 기본이 되는 JOIN이다. 두 테이블 모두에 데이터가 있는 경우만 합쳐서 보여준다.
영화 제목 옆에 language_id 숫자 대신, 진짜 언어 이름(English, Italian 등)을 붙여보자.

SELECT film.title, language.name
FROM film
INNER JOIN language
ON film.language_id = language.language_id;

 

 

 

와! 영화 제목 옆에 name(언어)이 착 달라붙었다.
ON 뒤에 "어떤 고리로 연결할지"만 알려주면 SQL이 알아서 짝을 찾아준다.

 

3. 코드가 너무 길다면? 별명(Alias) 쓰기

매번 film.title, language.name 처럼 테이블 이름을 다 쓰는 건 손가락이 아프다.
테이블에도 짧은 별명(AS)을 붙여줄 수 있다. 실무에서는 100% 이렇게 쓴다고 한다.

SELECT f.title, l.name
FROM film AS f
INNER JOIN language AS l
ON f.language_id = l.language_id;

filmf, languagel로 줄여 부르니 코드가 훨씬 깔끔해졌다.

 

4. 없는 데이터 찾아내기 (LEFT JOIN) ⭐

이번엔 좀 더 비즈니스적인 문제를 해결해 보자.
"우리 가게 영화 리스트(film)에는 있는데, 실제 창고(inventory)에는 없는 영화가 있을까?" (즉, 재고 누락 찾기)

이럴 땐 INNER JOIN을 쓰면 안 된다. 짝이 없는 데이터는 제외해 버리기 때문이다.
대신 왼쪽 테이블(film)을 기준으로 모든 데이터를 다 보여주는 LEFT JOIN을 써야 한다.

SELECT f.title, i.inventory_id
FROM film f
LEFT JOIN inventory i
ON f.film_id = i.film_id
WHERE i.inventory_id IS NULL; -- 재고가 빈(NULL) 것만 찾아라

 

 

 

결과를 보니 Alice Fantasia 같은 영화들은 inventory_id[NULL]로 비어있다.
즉, 서류상으론 존재하지만 실제 대여 가능한 재고는 없다는 뜻이다. LEFT JOIN이 아니었다면 찾아낼 수 없었을 귀한 정보들이다.

 

📝 오늘의 문법 요약 (Cheat Sheet)

JOIN은 헷갈리기 쉬우니 벤 다이어그램을 상상하는 게 좋다.

종류 설명 비고
INNER JOIN 두 테이블의 교집합 양쪽에 다 있는 데이터만 조회
LEFT JOIN 왼쪽 테이블 전체 + 오른쪽 일치 짝이 없으면 오른쪽은 NULL로 표시됨
ON 연결 조건 두 테이블의 공통 컬럼 지정 (Key)

이제 테이블을 하나로 합치는 기술까지 익혔으니, 분석할 수 있는 데이터의 범위가 무한대로 넓어졌다.
다음 시간에는 좀 더 복잡한 쿼리를 깔끔하게 정리하는 서브쿼리(Subquery)와 CTE(Common Table Expression)에 대해 다뤄보겠다.

 

 

[데이터 분석 독학기 #11 끝]

 

반응형