
안녕하세요, 공부하는 감자입니다 🥔
SQLD 준비하면서 기출을 돌리다 보니, 조인 문제에서 시간을 제일 많이 잡아먹고 있더라고요. 그런데 어느 순간 깨달은 게 있어요.
조인 문제는 결국 두 가지만 물어봅니다. 결과가 몇 행인지, 그리고 NULL이 어디에 찍히는지. 이 둘만 빠르게 판단할 수 있으면 보기 소거가 순식간에 됩니다.
2과목(SQL 기본 및 활용)에서 조인 관련 문제가 회차마다 3~5개씩 나와요. 문제당 2점이니 이 영역에서만 최대 10점이 왔다 갔다 하는 셈이고, 커트라인이 60점인 시험에서 이건 꽤 큰 비중입니다.
게다가 서브쿼리나 윈도우 함수 문제도 조인 결과를 그릴 줄 알아야 풀리는 경우가 많아서, 여기가 흔들리면 연쇄적으로 점수가 샙니다.
행 개수부터 세는 습관
저는 문제를 보면 SQL을 해석하기 전에 결과 행 수부터 셉니다. 규칙은 이게 전부예요.
| 조인 종류 | 결과 행 수 |
|---|---|
| INNER JOIN | ON 조건이 맞는 행만 |
| LEFT OUTER | 왼쪽 테이블 행 수 기준 |
| RIGHT OUTER | 오른쪽 테이블 행 수 기준 |
| FULL OUTER | 양쪽 합집합 |
| CROSS JOIN | 왼쪽 행 수 × 오른쪽 행 수 |
보기 4개 중에 행 수가 다른 게 섞여 있으면, 행 수만 세고도 2~3개를 지울 수 있어요. 그다음에 NULL 위치로 확정하면 됩니다.
단, 함정이 하나 있는데요. 1:N 관계에서 조인하면 결과가 N배로 불어납니다.
"사원 한 명당 한 행 나오겠지"라고 가정하는 순간 틀려요. 급여 이력처럼 한 사람에게 여러 행이 매달린 테이블과 조인하는 문제가 이 함정을 노립니다.
예제로 한 번에 정리
직원 테이블과 부서 테이블을 놓고 보겠습니다.
STAFF
| staff_id | name | dept_id |
|---|---|---|
| 1 | 민준 | 10 |
| 2 | 서연 | 20 |
| 3 | 도윤 | NULL |
DEPT
| dept_id | dept_name |
|---|---|
| 10 | 기획 |
| 20 | 디자인 |
| 30 | 총무 |
이 두 테이블에서 핵심 인물은 도윤(부서 없음) 과 총무(직원 없음) 입니다. 조인 종류마다 이 둘의 운명이 갈려요.
- INNER JOIN → 2행. 도윤도 총무도 탈락
- LEFT OUTER (STAFF 기준) → 3행. 도윤이 살아남고 부서명 자리에 NULL
- RIGHT OUTER → 3행. 총무가 살아남고 직원명 자리에 NULL
- FULL OUTER → 4행. 둘 다 살아남음
- CROSS JOIN → 3 × 3 = 9행. 조건 없이 모든 조합
여기서 하나 더. 도윤의 dept_id는 NULL인데, SQL에서 NULL = NULL은 참이 아닙니다.
그래서 NULL 행은 INNER JOIN에서 무조건 빠지고, OUTER JOIN으로만 건질 수 있어요. 이거 모르면 행 수를 계속 잘못 셉니다.
시험이 제일 좋아하는 함정: ON과 WHERE
개인적으로 제일 많이 틀렸던 유형입니다. OUTER JOIN에서 조건을 어디에 쓰느냐로 결과가 완전히 달라져요.
-- (1) 왼쪽 행이 전부 유지됨
SELECT * FROM STAFF s
LEFT JOIN DEPT d ON s.dept_id = d.dept_id AND d.dept_name = '기획';
-- (2) OUTER가 사실상 INNER로 변함
SELECT * FROM STAFF s
LEFT JOIN DEPT d ON s.dept_id = d.dept_id
WHERE d.dept_name = '기획';
(2)처럼 오른쪽 테이블 조건을 WHERE에 쓰면, 매칭 안 돼서 NULL로 채워진 행들까지 걸러져버립니다. LEFT JOIN을 썼는데 결과는 INNER JOIN과 같아지는 거죠.
시험에서는 이 두 쿼리를 나란히 주고 "결과가 같은가?"를 물어봅니다. 다릅니다.
SELF JOIN도 가끔 나오는데, 같은 테이블을 별칭 두 개로 두 번 참조하는 형태(상사-부하 관계 같은 것)라는 것과 별칭이 필수라는 것만 기억하면 됩니다.
손으로 그려보는 연습이 전부
조인은 눈으로 읽어서는 절대 안 늘어요. 양쪽 테이블을 종이에 옮겨 적고, 매칭되는 행끼리 선을 그어보는 연습을 몇 번 하면 그다음부터는 머릿속에서 그려집니다.
연습할 때는 회차 단위로 풀어보는 걸 추천하는데, 저는 문어CBT에서 모의고사를 돌렸어요. 무료인데 틀린 문제를 자동으로 다시 보여줘서 조인처럼 반복이 필요한 유형 잡는 데 괜찮았습니다.
SQLD·정처기·컴활·ADsP 무료 CBT 모의고사
기출 변형 문제, 자동 채점, 회차별 실력 추적까지 가입 없이 바로 풀어보세요.
sqldpass.com
정리하면 이렇습니다.
- 행 수 규칙 5개를 외운다 (INNER/LEFT/RIGHT/FULL/CROSS)
- NULL 컬럼은 INNER에서 탈락한다는 걸 기억한다
- OUTER JOIN의 오른쪽 조건은 반드시 ON에 — WHERE에 있으면 INNER로 변신
- 1:N 조인은 행이 불어난다
이 네 줄이면 조인 문제 대부분은 커버됩니다. 다음 글에서는 윈도우 함수 쪽을 정리해볼게요.
같이 합격합시다 💪
'자격증 > SQLD' 카테고리의 다른 글
| SQLD CONNECT BY 계층 쿼리 정리 (PRIOR 이해법) (0) | 2026.06.22 |
|---|---|
| SQLD NULL 연산 정리, 오답률 1위 유형 (0) | 2026.06.20 |
| 2026 SQLD 일정 정리, 회차별 접수·시험·발표일 (0) | 2026.06.16 |
| 2026 SQLD 출제 경향과 영역별 60점 전략 (0) | 2026.06.16 |
| SQLD 2주 합격 플랜 — 2과목부터 풀어야 하는 이유 (1) | 2026.06.14 |