SQLD를 준비하다 보면 JOIN에서 한 번은 막힙니다. INNER, LEFT, RIGHT, FULL 이름은 외웠는데 막상 결과가 몇 행인지 물으면 헷갈리죠. 사실 JOIN은 딱 하나만 이해하면 끝납니다. 두 표에서 짝이 있는 행은 붙이고, 짝이 없는 행은 버릴지 남길지 정한다는 것입니다. 이 글에서는 작은 표 두 개로 네 가지를 한 번에 정리합니다. 아래 결과는 실제로 쿼리를 실행해서 확인한 값입니다.
JOIN은 두 표를 공통 값(보통 기본키와 외래키)으로 이어 붙여 한 줄로 보여 주는 문법입니다. 회원 표와 주문 표를 예로 들겠습니다.
회원(m) 주문(o)
id name oid mid amt
1 철수 101 1 5000
2 영희 102 1 12000
3 민수 103 3 3000
104 9 8000 주문 표의 mid가 회원 표의 id를 가리킵니다. 그림으로 보면 이렇습니다.
철수는 주문이 두 건이라 선이 두 개, 민수는 한 건입니다. 영희는 주문이 없고, 주문 104번은 mid가 9인데 회원 표에 9번 회원이 없습니다. 이렇게 짝이 없는 두 행을 어떻게 다루느냐가 JOIN 종류를 나눕니다.
OUTER라는 단어는 생략해도 됩니다. LEFT JOIN이라고만 써도 같은 뜻입니다.
SELECT m.name, o.oid, o.amt FROM 회원 m LEFT JOIN 주문 o ON m.id = o.mid;
LEFT JOIN 결과는 다음과 같습니다. INNER JOIN이라면 영희 줄만 빠집니다.
name oid amt 철수 101 5000 철수 102 12000 영희 NULL NULL 민수 103 3000
RIGHT JOIN은 영희 줄 대신 NULL, 104, 8000 줄이 생기고, FULL JOIN은 두 줄이 모두 있어 5행이 됩니다.
1) LEFT JOIN인데 왜 왼쪽 행이 사라질까. 오른쪽 표의 조건을 WHERE에 쓰면 NULL 행이 걸러져 사실상 INNER JOIN이 됩니다.
-- 영희가 사라짐 (결과 2행: 철수 101, 102) ... LEFT JOIN 주문 o ON m.id = o.mid WHERE o.amt >= 5000; -- 영희가 남음 (결과 4행: 철수 101, 102, 영희 NULL, 민수 NULL) ... LEFT JOIN 주문 o ON m.id = o.mid AND o.amt >= 5000;
조건을 ON에 쓰면 “짝을 맺는 조건”이고, WHERE에 쓰면 “다 붙인 뒤 거르는 조건”입니다. 순서가 달라서 결과가 달라집니다.
2) 주문이 없는 회원 찾기. LEFT JOIN 뒤에 오른쪽 기본키가 NULL인 행만 고르면 됩니다.
SELECT m.name FROM 회원 m LEFT JOIN 주문 o ON m.id = o.mid WHERE o.oid IS NULL; -- 결과: 영희
3) COUNT(*)와 COUNT(컬럼)의 차이. 회원별로 세어 보면 영희는 COUNT(*)가 1, COUNT(o.oid)는 0입니다. NULL로 붙은 행도 한 줄이라 COUNT(*)는 세고, 컬럼 COUNT는 NULL을 세지 않기 때문입니다. 주문 건수를 셀 때는 COUNT(o.oid)가 맞습니다.
제가 문제를 풀 때 쓰는 순서입니다. 먼저 ON 조건으로 짝 지어지는 선을 그립니다. 다음으로 짝 없는 행이 어느 쪽에 있는지 표시합니다. 마지막으로 LEFT면 왼쪽, RIGHT면 오른쪽, FULL이면 양쪽의 짝 없는 행을 살려 줄 수를 셉니다. 벤 다이어그램은 개념 이해용으로는 좋지만, 한 행이 여러 행과 짝이 되는 경우(철수의 주문 두 건)는 원 그림에 드러나지 않습니다. 줄 수를 묻는 문제에서는 꼭 선을 그려 보는 쪽이 안전합니다.
안내: 예시 표는 설명을 위해 직접 만든 가상의 데이터이며, 결과는 SQLite에서 실행해 확인했습니다. 실제 시험 문제와 같지 않을 수 있으니 공식 기출과 함께 학습하세요.
11월에 일정이 있는 금융 DT 테스트 시험을 정리했습니다. 접수, 시험, 합격 발표 날짜를 한 번에…
같은 계좌를 두 사용자가 동시에 건드릴 때 데이터베이스가 어디까지 서로의 작업을 보여 줄지 정하는 설정이…
배당은 회사가 번 이익을 주주에게 현금으로 나눠 주는 일이다. "배당수익률 3%"라는 숫자는 매력적으로 보이지만 세금,…
주식 기사나 증권사 리포트에서 가장 자주 만나는 지표가 PER, PBR, ROE이다. 따로 외우면 숫자의 나열에…
컴퓨터활용능력 스프레드시트 파트에서는 조건에 맞는 값만 합치고 세는 문제가 거의 매 회차 나온다. SUMIF 계열…