먼저 결론부터
2026 SQLD는 객관식 50문항·60점 이상 합격이라는 틀은 그대로지만, 2024년 출제기준 개편이 이미 두 해째 적용된 시점이라 과목 비중이 2과목(SQL)에 확실히 쏠려 있습니다. 1과목(데이터 모델링)은 10문항 고정이라 개념만 단단히 잡고, 2과목 40문항 중 JOIN·서브쿼리·윈도우 함수·계층형 쿼리 네 덩어리를 중심으로 공부하면 합격선이 보입니다.
2026 SQLD는 60회(3/7)·61회(5/31)·62회(8/22)·63회(11/14) 네 번 시행됩니다. 접수는 보통 시험 4~5주 전에 열리니, 최소 1회차 여유를 두고 계획을 짜두세요.왜 2026에 맞춘 개념 정리가 따로 필요한가
2023년까지의 SQLD는 단답형 10문항 이내 + 선택형이었습니다. 2024년 제52회부터 단답형이 완전히 사라지고 선택형 50문항으로 통일됐고, 1과목 명칭도 "데이터 모델과 성능" → "데이터 모델과 SQL"로 바뀌면서 성능 이슈가 2과목 쪽으로 재배치됐습니다.
결과적으로 2024년 이후 시행된 52~57회 기출을 보면 다음 경향이 뚜렷합니다.
- 1과목에서 식별자·관계·정규화 개념을 말로 꼬아서 묻는 지문형 문제 증가
- 2과목에서 계층형 쿼리·윈도우 함수·정규표현식이 2~3문제씩 꾸준히 출제
- NULL 처리(
NVL,COALESCE,NULLIF), 집합 연산,CASE표현식 같은 실행 결과 예측 문제 비중 확대
즉, 2026 대비는 "과거 단답형 암기"가 아니라 "쿼리를 눈으로 실행해보는 훈련"이 핵심입니다.
2026 SQLD 시험 개요
| 항목 | 내용 |
|---|---|
| 시행 기관 | 한국데이터산업진흥원(KDATA) |
| 2026 회차 | 60회(3/7), 61회(5/31), 62회(8/22), 63회(11/14) |
| 문항 수 | 객관식 50문항 (단답형 없음) |
| 배점 | 1과목 20점(10문항) + 2과목 80점(40문항) |
| 합격 기준 | 총점 60점 이상 AND 각 과목 40% 이상 |
| 과락 기준 | 1과목 8점 미만 / 2과목 32점 미만 |
| 시험 시간 | 90분 |
1과목: 데이터 모델링의 이해 (10문항)
엔터티·속성·관계 — 시험에서 묻는 각도
| 개념 | 한 줄 정의 | 2026 출제 포인트 |
|---|---|---|
| 엔터티 | 업무에서 관리해야 할 정보 덩어리 | 유형/개념/사건 구분, 기본/중심/행위 구분 |
| 속성 | 엔터티가 가지는 최소 의미 단위 | 기본/설계/파생 속성 구분 |
| 관계 | 엔터티 간 논리적 연결 | 카디널리티, 선택성(필수/선택) |
| 식별자 | 인스턴스를 유일하게 구분하는 속성 | 주식별자 4조건, 내부·외부·복합 식별자 |
주식별자 조건은 유일성, 최소성, 불변성, 존재성 네 가지입니다. 이 중 "불변성"은 "값이 자주 바뀌지 않는다"가 아니라 "한 번 지정되면 변경되지 않는다"에 가깝게 해석해야 합니다. 주민번호가 주식별자로 부적절한 이유를 물으면 대부분 "불변성"이 아니라 개인정보 보호·존재성(외국인 없음) 쪽으로 답을 밀어야 맞습니다.
정규화 — 2NF와 3NF를 가르는 한 줄
정규화는 "함수 종속을 줄여 이상 현상을 제거하는 과정"입니다.
| 단계 | 제거 대상 | 한 줄 판별법 |
|---|---|---|
| 1NF | 다중값, 반복 그룹 | "한 칸에 여러 값이 들어있지 않은가?" |
| 2NF | 부분 함수 종속 | "복합키의 일부 컬럼만으로 결정되는 속성이 있는가?" |
| 3NF | 이행 함수 종속 | "PK가 아닌 속성이 PK가 아닌 다른 속성을 결정하는가?" |
| BCNF | 비후보키 결정자 | "후보키가 아닌데 결정자인 속성이 있는가?" |
반정규화
"성능을 위해 의도적으로 정규화를 깬다"고 기억하되, 시험에서는 언제 쓰면 안 되는가를 자주 묻습니다. 조회 성능은 좋아져도 갱신 이상이 생길 수 있고, 데이터 무결성 책임이 애플리케이션으로 넘어온다는 점이 정답 선지의 단골입니다.
2과목: 데이터 모델과 SQL (40문항)
2024년 개편 이후 2과목은 "SQL 기본·활용·최적화 기초"를 통합해 묻습니다. 여기서 점수가 갈립니다.
SELECT 논리적 실행 순서
FROM → ON → JOIN → WHERE → GROUP BY → HAVING → SELECT → DISTINCT → ORDER BY → LIMIT/FETCH
SELECT절에서 정의한 별칭(alias)은 WHERE/GROUP BY/HAVING에서 쓸 수 없고 ORDER BY에서만 쓸 수 있다 — 이 원칙 한 줄에서 매번 한 문제가 나옵니다. 이유는 위 실행 순서에서 SELECT가 ORDER BY보다 앞에 있기 때문입니다.
JOIN — 2026에서도 가장 많이 나오는 영역
| JOIN | 결과 |
|---|---|
| INNER JOIN | 양쪽 조건 일치 행만 |
| LEFT OUTER | 왼쪽 전체 + 오른쪽 매칭 (없으면 NULL) |
| RIGHT OUTER | 오른쪽 전체 + 왼쪽 매칭 |
| FULL OUTER | 양쪽 전체, 매칭 없으면 NULL |
| CROSS | 카테시안 곱 (m × n) |
| NATURAL | 같은 이름 컬럼으로 자동 결합, 공통 컬럼 한 번만 출력 |
| USING(col) | 지정한 공통 컬럼으로 결합, 한 번만 출력 |
-- OUTER JOIN + WHERE 함정
SELECT e.name, d.dname
FROM emp e
LEFT JOIN dept d ON e.dept_id = d.id
WHERE d.dname = 'SALES'; -- 이 WHERE가 LEFT JOIN을 INNER처럼 만들어버림
-- 의도대로 NULL도 보려면 ON절로 옮기기
SELECT e.name, d.dname
FROM emp e
LEFT JOIN dept d
ON e.dept_id = d.id
AND d.dname = 'SALES';
OUTER JOIN에서 부가 조건은 ON에 걸지, WHERE에 걸지가 정답을 완전히 바꿉니다. 실제 결과를 손으로 한 번 써본 사람만 맞힐 수 있게 설계된 문제입니다.
서브쿼리 분류
| 위치 | 이름 | 주의점 |
|---|---|---|
| SELECT절 | 스칼라 서브쿼리 | 반드시 1행 1열 반환 |
| FROM절 | 인라인 뷰 | 별칭 필수 |
| WHERE절 | 일반/상관 서브쿼리 | 상관은 바깥 행마다 재실행 |
상관 서브쿼리와 EXISTS는 한 세트로 외워두세요. IN (NULL 포함 리스트)은 기대와 다르게 동작하니, NULL이 섞일 수 있는 컬럼에는 NOT IN 대신 NOT EXISTS를 쓰는 이유를 반드시 이해하고 넘어가야 합니다.
윈도우 함수 — 매 회차 3문제 이상
SELECT empno, deptno, sal,
ROW_NUMBER() OVER (PARTITION BY deptno ORDER BY sal DESC) AS rn,
RANK() OVER (PARTITION BY deptno ORDER BY sal DESC) AS rk,
DENSE_RANK() OVER (PARTITION BY deptno ORDER BY sal DESC) AS drk,
LAG(sal, 1) OVER (PARTITION BY deptno ORDER BY sal DESC) AS prev_sal,
SUM(sal) OVER (PARTITION BY deptno ORDER BY sal DESC
ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS cum_sal
FROM emp;
| 함수 | 동점 처리 |
|---|---|
| ROW_NUMBER | 동점이어도 순차 번호 (1,2,3,4) |
| RANK | 동점 동순위, 다음 순위 건너뜀 (1,2,2,4) |
| DENSE_RANK | 동점 동순위, 다음 순위 연속 (1,2,2,3) |
2026 대비 포인트는 프레임 절(ROWS BETWEEN ... AND ...) 입니다. 누적합과 이동평균을 계산하는 선지에서 UNBOUNDED PRECEDING, CURRENT ROW, N PRECEDING/FOLLOWING 차이를 묻습니다.
계층형 쿼리 (Oracle 기준)
SELECT LEVEL,
LPAD(' ', (LEVEL-1)*2) || ename AS tree,
CONNECT_BY_ISLEAF AS is_leaf,
SYS_CONNECT_BY_PATH(ename, '/') AS path
FROM emp
START WITH mgr IS NULL
CONNECT BY PRIOR empno = mgr
ORDER SIBLINGS BY ename;
PRIOR위치에 따라 순방향(부모→자식) 인지 역방향(자식→부모) 인지 바뀝니다.LEVEL,CONNECT_BY_ROOT,CONNECT_BY_ISLEAF,SYS_CONNECT_BY_PATH— 이 네 가지는 57회까지 반복 출제됐고 2026에도 유력합니다.ORDER SIBLINGS BY는 형제 노드 내에서만 정렬한다는 뜻. 일반ORDER BY를 쓰면 계층이 깨집니다.
그룹 확장 함수
SELECT deptno, job, SUM(sal)
FROM emp
GROUP BY ROLLUP(deptno, job); -- (deptno, job) → (deptno) → ()
| 함수 | 생성되는 소계 조합 |
|---|---|
| ROLLUP(A,B) | (A,B), (A), () |
| CUBE(A,B) | (A,B), (A), (B), () |
| GROUPING SETS((A),(B)) | (A), (B) — 원하는 조합만 |
GROUPING() 함수가 반환하는 0/1의 의미(그룹핑 대상이면 0, 소계 행이면 1)도 선지 단골입니다.
NULL 처리
NVL(col, 0) -- Oracle, 2인자
NVL2(col, 'Y', 'N') -- NULL 아니면 'Y', NULL이면 'N'
COALESCE(a, b, c, 0) -- ANSI 표준, 다인자
NULLIF(a, b) -- a=b면 NULL, 아니면 a
시험에서 자주 틀리는 구간은 집계 함수의 NULL 무시 여부입니다. COUNT(*)는 NULL도 세지만, COUNT(col)과 SUM/AVG(col)은 NULL을 건너뜁니다. 그래서 AVG(col) 값이 "전체 행 평균"이 아닐 수 있다는 함정 문제가 반복 출제됩니다.
자주 하는 실수 7가지
WHERE col = NULL: 항상 UNKNOWN으로 평가되어 한 행도 못 가져옵니다.IS NULL사용.NOT IN에 NULL이 섞인 서브쿼리: 전체 결과가 공집합이 됩니다.NOT EXISTS로 회피.- HAVING과 WHERE 혼동: 집계 함수 조건은 HAVING, 행 단위 조건은 WHERE.
- OUTER JOIN 결과에 WHERE 조건: 바깥 테이블 쪽 NULL 행이 제거되어 INNER와 같아집니다.
ORDER BY없는ROWNUM: Oracle의ROWNUM은 정렬 전에 부여됩니다. Top-N은 인라인 뷰로 먼저 정렬.- DDL은 자동 커밋:
TRUNCATE,DROP은 ROLLBACK 불가.DELETE만 트랜잭션 내에서 되돌릴 수 있음. UNION은 중복 제거 + 정렬: 성능 고려 시UNION ALL. 합격·불합격 가르는 계산 문제에서 이 차이를 자주 묻습니다.
시험장에서의 실전 접근법
- 1과목부터 푸세요. 10문항이라 짧고, 집중력이 가장 높을 때 끝내야 과락을 피합니다.
- 2과목은 쿼리를 손으로 먼저 실행합니다. 선지를 먼저 보지 말고, 문제의 쿼리를 한 줄씩 따라가면서 중간 테이블을 작게 써두면 OUTER JOIN·윈도우 함수 문제가 절반으로 쉬워집니다.
- 모르는 문제는 건너뜁니다. 90분에 50문항은 빠듯하지 않지만, 계층형이나 정규표현식에서 한 문제에 5분 이상 붙잡히면 뒤의 쉬운 문제까지 놓칩니다.
- OMR은 10문항 단위로 옮겨 적는 것을 추천합니다. 막판 일괄 마킹은 밀려쓰기 사고의 주원인입니다.
2026 SQLD 학습 우선순위 요약
보수적으로 점수 확보가 쉬운 영역부터 정리하면 다음과 같습니다.
| 우선순위 | 주제 | 예상 출제 |
|---|---|---|
| 최상 | JOIN(ON vs WHERE), 서브쿼리 분류 | 5~7문항 |
| 상 | 윈도우 함수, 그룹 확장(ROLLUP/CUBE) | 4~6문항 |
| 상 | 계층형 쿼리, NULL 처리 함수 | 3~5문항 |
| 중 | 정규화·식별자·관계 | 5~7문항 |
| 중 | SELECT 실행 순서, 집합 연산, CASE | 3~5문항 |
| 하 | 정규표현식, 트랜잭션/DDL 이론 | 1~3문항 |
이 순서대로만 잡아도 60점 합격선은 상당히 안정적입니다. 단, 2026에는 프레임 절이 포함된 윈도우 함수와 OUTER JOIN의 ON/WHERE 차이가 조금 더 비중이 올라갈 가능성이 높으니 여기서 점수를 굳히는 걸 목표로 잡으세요.
한 번에 훑는 최종 요약
- 2026 SQLD는 객관식 50문항·90분·60점 합격 구조를 유지하되, 과락(1과목 8점/2과목 32점)을 특히 조심해야 합니다.
- 1과목은 정규화(특히 2NF·3NF)와 식별자 4조건, 2과목은 JOIN·서브쿼리·윈도우·계층형 이 네 축이 전부라고 봐도 됩니다.
- 최근 56~57회 경향상 프레임 절, OUTER JOIN 조건 위치, NULL 집계 같은 "실행 결과를 정확히 계산해야 하는 문제"가 늘고 있습니다. 눈으로 읽고 넘어가지 말고 직접 쿼리를 써서 결과를 확인하는 연습이 필요합니다.
- 이론만으로는 60점을 넘기기 애매합니다. 기출 회차별 풀이 + CBT 반복이 2026 합격의 확실한 루트입니다.
개념을 정리했다면 이제 실제 문제로 확인할 차례입니다. 2026 시험 범위에 맞춰 정리된 기출·CBT를 바로 풀어보세요.