이 글의 핵심
문법을 아는 것과 결과 행을 정확히 계산하는 것은 다릅니다.
오답은 NULL·행 수·실행 순서·트랜잭션 네 범주로 분류하면 재발을 줄일 수 있습니다.
정답만 확인하지 말고 조건 하나를 바꿨을 때 결과가 어떻게 달라지는지 설명해야 합니다.
1~3. NULL을 일반 값처럼 취급하는 실수
첫째, column = NULL로 NULL을 찾으면 비교 결과가 UNKNOWN이므로 원하는 행이 나오지 않습니다. IS NULL을 사용해야 합니다. 둘째, NULL이 포함된 산술식은 대체로 NULL이 됩니다. 셋째, COUNT(column)이 모든 행을 센다고 생각하기 쉽지만 해당 열의 NULL은 제외됩니다.
- = NULL 대신 IS NULL 사용
- 산술식 전에 COALESCE·NVL 적용 여부 확인
- COUNT(*)와 COUNT(column)의 분모 구분
4~5. OUTER JOIN을 작성하고 WHERE에서 다시 제거하기
넷째, LEFT JOIN으로 왼쪽 행을 보존한 뒤 오른쪽 테이블의 열을 WHERE에서 제한하면 NULL로 채워진 미일치 행이 제거될 수 있습니다. 기준 집합을 보존해야 한다면 조건을 ON 절에 둘지 검토합니다.
다섯째, 조인 키가 유일하다고 근거 없이 가정하면 결과 행 수를 잘못 계산합니다. 한 고객에게 주문이 여러 건이면 고객 행도 주문 건수만큼 반복됩니다.
SELECT c.customer_id, o.order_id
FROM customers c
LEFT JOIN orders o
ON o.customer_id = c.customer_id
AND o.status = 'PAID';6~7. GROUP BY 전후를 섞는 실수
여섯째, 집계 결과 조건을 WHERE에 쓰려고 하면 실행 순서가 맞지 않습니다. 그룹 결과는 HAVING에서 제한합니다. 일곱째, GROUP BY에 없는 일반 열을 SELECT에 추가하면 그룹을 대표할 값을 정할 수 없습니다.
집계 문제에서는 WHERE 적용 후 남은 행을 먼저 표시하고, 그룹별 묶음을 만든 뒤 집계값과 HAVING을 차례로 계산하세요.
8. NOT IN 서브쿼리의 NULL을 놓치는 실수
NOT IN의 오른쪽 집합에 NULL이 포함되면 UNKNOWN 때문에 결과가 예상과 달라질 수 있습니다. 서브쿼리에서 NULL을 제거하거나, “관련 행이 존재하지 않는다”는 의미라면 NOT EXISTS로 표현하는 방법을 검토합니다.
9. 순위 함수의 동점 처리를 섞는 실수
RANK는 동점 다음 순위를 건너뛰고 DENSE_RANK는 건너뛰지 않습니다. ROW_NUMBER는 동점도 서로 다른 번호를 부여합니다. 문제에서 공동 순위인지 상위 N개 행인지 목적을 먼저 확인해야 합니다.
10. COMMIT과 ROLLBACK 범위를 외우기만 하는 실수
트랜잭션 문제는 명령을 시간순으로 적고 어느 지점에서 변경 내용이 확정되는지 표시해야 합니다. COMMIT은 현재 트랜잭션의 변경을 확정하고 ROLLBACK은 아직 확정되지 않은 변경을 취소합니다. DDL의 암시적 커밋 여부 등은 문제에서 전제한 DBMS 기준을 확인해야 합니다.
오답을 다시 틀리지 않는 기록법
오답노트에는 문제 전체를 옮기기보다 내가 적용한 잘못된 규칙과 올바른 판단 순서를 기록하세요. 예를 들어 “LEFT JOIN이면 모두 남는다”가 아니라 “WHERE의 오른쪽 조건이 NULL 보존 행을 제거했다”라고 적는 방식입니다.
- 오답 원인: 몰랐음·순서 착각·조건 누락·계산 실수 중 선택
- 한 줄 교정: 다음에는 무엇을 먼저 확인할지 기록
- 변형 질문: 조건 하나를 바꾸면 결과가 어떻게 달라지는지 설명
가풀에서 시험을 제출하면 틀린 문항이 오답노트에 저장됩니다. 같은 유형을 다시 맞히면 자동으로 정리되므로 반복 오답부터 복습하세요.
자주 묻는 질문
SQL 오답은 몇 번 복습해야 하나요?
횟수보다 같은 판단 절차를 재현할 수 있는지가 중요합니다. 다음 날과 3~7일 뒤에 변형 문제를 풀어 같은 실수가 반복되는지 확인하세요.
DBMS마다 결과가 다른 문법은 어떻게 공부하나요?
표준 개념을 먼저 익히고 Oracle과 SQL Server 등 시험에서 다루는 차이를 별도 표로 정리하세요. 문제에 DBMS 전제가 있으면 그 기준을 우선 적용합니다.
시험 과목과 합격 기준은 KDATA SQL 개발자 공식 안내를 기준으로 확인했습니다. 가풀은 시험 주관기관의 공식 서비스가 아니며, 일정과 규정은 접수 전 공식 공고를 다시 확인해야 합니다.