자격증/SQLD

SQLD 조인 문제, 결국 '몇 행이 나오느냐' 싸움입니다

공감(공부하는감자) 2026. 6. 20. 18:14

안녕하세요, 공부하는 감자입니다 🥔

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

정리하면 이렇습니다.

  1. 행 수 규칙 5개를 외운다 (INNER/LEFT/RIGHT/FULL/CROSS)
  2. NULL 컬럼은 INNER에서 탈락한다는 걸 기억한다
  3. OUTER JOIN의 오른쪽 조건은 반드시 ON에 — WHERE에 있으면 INNER로 변신
  4. 1:N 조인은 행이 불어난다

이 네 줄이면 조인 문제 대부분은 커버됩니다. 다음 글에서는 윈도우 함수 쪽을 정리해볼게요.

같이 합격합시다 💪