SQLD 핵심 개념, 집계·서브쿼리·집합연산자 8문제로 정리

SQLD에서 점수 차이를 만드는 건 어려운 문법보다 NULL이 끼어드는 순간의 결과값인 경우가 많습니다. 집계 함수, 서브쿼리, 집합 연산자는 그 함정이 가장 자주 나오는 구간이라 한 번 정리해 두면 효과가 큽니다.

이번 글은 GROUP BY·HAVING, NOT IN과 NULL, UNION 계열, ROLLUP, 상관 서브쿼리, CASE 집계까지 8문제로 묶었습니다. 모든 결과는 실제로 쿼리를 실행해 확인했습니다.

학습용 예상문제이며 실제 시험과 다를 수 있습니다. 직접 만든 문제이고 기출문제를 옮긴 것이 아닙니다. 최신 출제 범위와 일정은 한국데이터산업진흥원 공식 공지를 꼭 확인하세요.

이 글의 구성

  • 공통 테이블 EMP 정의와 문제 1~4: 집계, NULL, 집합 연산자
  • 문제 5~8: ROLLUP, 상관 서브쿼리, CASE 집계, AVG와 NULL
  • 공부 팁 3가지

문제 1, 5, 6, 7, 8은 아래 EMP 테이블을 사용합니다.

EMP (ENAME, DEPT, SAL, BONUS)
김  10  300  50
이  10  400  NULL
박  20  500  100
최  20  200  NULL
정  30  600  NULL
한  30  300  30

문제 1. GROUP BY와 HAVING 결과 읽기

다음 쿼리의 결과 행을 쓰시오.

SELECT DEPT, COUNT(*), COUNT(BONUS), AVG(BONUS), SUM(SAL)
FROM EMP
GROUP BY DEPT
HAVING SUM(SAL) >= 800;
정답: 30 | 2 | 1 | 30 | 900 (1행)
HAVING은 그룹을 만든 뒤 걸러내므로 부서별 급여 합이 700, 700, 900인 가운데 900인 30번 부서만 남습니다. COUNT(*)는 행 수라 2, COUNT(BONUS)는 NULL을 빼고 세어 1입니다. AVG(BONUS)도 NULL 행을 제외하고 30 하나만으로 평균을 내므로 30입니다.

문제 2. NOT IN 서브쿼리와 NULL

테이블 A(X)에는 1, 2, 3, 4가 있고 테이블 B(Y)에는 2와 NULL이 있다. 두 쿼리의 결과 건수를 각각 쓰시오.

-- (가)
SELECT COUNT(*) FROM A WHERE X NOT IN (SELECT Y FROM B);
-- (나)
SELECT COUNT(*) FROM A
WHERE NOT EXISTS (SELECT 1 FROM B WHERE B.Y = A.X);
정답: (가) 0건, (나) 3건
NOT IN은 X <> 2 AND X <> NULL로 풀리는데, NULL과의 비교는 UNKNOWN이라 어느 행도 참이 되지 못합니다. 서브쿼리 결과에 NULL이 하나라도 있으면 NOT IN은 빈 결과가 됩니다. NOT EXISTS는 일치하는 행이 있는지만 보므로 1, 3, 4가 남아 3건입니다. 실무에서 NOT IN 대신 NOT EXISTS를 권하는 이유입니다.

문제 3. UNION과 UNION ALL의 행 수

S1(V)에는 1, 2, 2, 3이 있고 S2(V)에는 2, 3, 3, 4가 있다. 아래 두 쿼리의 결과 행 수를 쓰시오.

SELECT V FROM S1 UNION SELECT V FROM S2;
SELECT V FROM S1 UNION ALL SELECT V FROM S2;
정답: UNION 4행, UNION ALL 8행
UNION은 합친 뒤 중복을 제거하므로 1, 2, 3, 4 네 행입니다. 중복 제거를 위해 정렬이나 해시 작업이 들어갑니다. UNION ALL은 중복을 그대로 두어 4+4=8행이고, 중복이 없다는 걸 알고 있다면 이쪽이 더 빠릅니다.

문제 4. EXCEPT와 INTERSECT

문제 3의 S1, S2에 대해 S1 EXCEPT S2와 S1 INTERSECT S2의 결과를 쓰고, Oracle에서 EXCEPT에 해당하는 키워드를 답하시오.

정답: EXCEPT는 1, INTERSECT는 2와 3, Oracle의 키워드는 MINUS
EXCEPT는 앞 집합에만 있는 값(중복 제거)이라 S1에서 S2와 겹치는 2, 3을 뺀 1이 남습니다. INTERSECT는 양쪽에 모두 있는 2, 3입니다. 둘 다 기본적으로 중복을 제거하며, Oracle은 EXCEPT 대신 MINUS를 씁니다.

문제 5. ROLLUP의 소계와 총계

EMP에 대해 다음 쿼리의 결과 행 수와 마지막 행을 쓰시오.

SELECT DEPT, SUM(SAL)
FROM EMP
GROUP BY ROLLUP(DEPT);
정답: 4행, 마지막 행은 DEPT가 NULL이고 합계 2300
ROLLUP(DEPT)는 부서별 합계 3행(700, 700, 900)에 전체 총계 1행을 더합니다. 총계 행의 DEPT는 NULL로 표시됩니다. 원본 데이터에도 NULL이 있을 수 있어서, 총계 행인지 구분하려면 GROUPING(DEPT) 함수가 1을 돌려주는지 확인합니다. 컬럼이 n개인 ROLLUP은 n+1가지 수준의 집계가 만들어집니다.

문제 6. 상관 서브쿼리로 부서 평균 비교

자기 부서의 평균 급여보다 급여가 높은 사원을 구하는 쿼리의 결과를 쓰시오.

SELECT E.ENAME
FROM EMP E
WHERE E.SAL > (SELECT AVG(X.SAL) FROM EMP X WHERE X.DEPT = E.DEPT);
정답: 이, 박, 정
바깥 행마다 같은 부서의 평균을 다시 계산하는 상관 서브쿼리입니다. 10번 부서 평균은 350이라 이(400), 20번 부서 평균은 350이라 박(500), 30번 부서 평균은 450이라 정(600)이 조건을 만족합니다. 서브쿼리에서 DEPT 조건을 빼면 전체 평균(약 383)과 비교하는 전혀 다른 쿼리가 됩니다.

문제 7. CASE로 만드는 집계와 NULL

다음 두 컬럼 값을 각각 쓰시오.

SELECT SUM(CASE WHEN DEPT = 40 THEN SAL END) AS C1,
       SUM(CASE WHEN DEPT = 40 THEN SAL ELSE 0 END) AS C2
FROM EMP;
정답: C1은 NULL, C2는 0
ELSE가 없는 CASE는 조건에 맞지 않으면 NULL을 반환합니다. 40번 부서 사원이 없으니 C1은 NULL 값만 합산해 NULL이 됩니다. C2는 모든 행이 0이라 합이 0입니다. SUM은 입력이 전부 NULL이면 0이 아니라 NULL을 돌려준다는 점을 기억하세요.

문제 8. AVG와 NULL 처리 방식 비교

다음 세 식의 결과를 각각 쓰시오.

SELECT AVG(BONUS),
       SUM(BONUS) / COUNT(*),
       AVG(NVL(BONUS, 0))
FROM EMP;
정답: 60, 30, 30
BONUS 합계는 180입니다. AVG(BONUS)는 NULL을 제외한 3건(50, 100, 30)으로 나누어 60이고, SUM(BONUS)/COUNT(*)는 전체 6행으로 나누어 30입니다. NVL로 NULL을 0으로 바꾸면 6건 평균이 되어 30입니다. NVL은 Oracle 함수이고 SQL Server는 ISNULL, 표준은 COALESCE입니다.

공부 팁 3가지

  1. 쿼리 결과를 눈으로만 예측하지 말고 작은 테이블을 직접 만들어 실행해 보세요. NULL이 섞인 6~8행짜리 표 하나면 이번 글의 문제 대부분을 재현할 수 있습니다.
  2. 실행 순서(FROM, WHERE, GROUP BY, HAVING, SELECT, ORDER BY)를 외워 두면 WHERE에 집계 함수를 못 쓰는 이유와 HAVING의 역할이 자연스럽게 정리됩니다.
  3. 틀린 문제는 정답이 아니라 ‘어디서 NULL이 UNKNOWN으로 바뀌었는지’를 한 줄로 적어 두세요. 같은 함정은 다른 모양으로 다시 나옵니다.

이 글의 문제는 학습용으로 직접 만든 예상문제이며 실제 시험과 다를 수 있습니다. 시험 범위, 일정, 합격 기준은 한국데이터산업진흥원 등 공식 공지를 확인하시기 바랍니다.

zerg96

Share
Published by
zerg96

Recent Posts

정부가 먼저 꺼낸 집값 급락 경고, 기준금리 3.0%·대출 한도 6억 수치로 따져보니

정부 쪽에서 집값이 크게 떨어질 수 있으니 대비하자는 말이 나오고 있습니다. 그런데 시장에서는 서울 아파트값이…

3시간 ago

2026년 11월 빅데이터분석기사 시험 일정 (접수·시험·발표)

11월에 일정이 있는 빅데이터분석기사 시험을 정리했습니다. 접수, 시험, 합격 발표 날짜를 한 번에 볼 수…

10시간 ago

2026년 11월 정보보안기사·정보보안산업기사 시험 일정 (접수·시험·발표)

11월에 일정이 있는 정보보안기사·정보보안산업기사 시험을 정리했습니다. 접수, 시험, 합격 발표 날짜를 한 번에 볼 수…

12시간 ago

코스피 3.73% 급락 5,552 마감, 팔고 나간 외국인·기관 물량을 받아낸 건 개인 — 10월 20일 증시 정리

10월 20일 코스피는 3.73% 하락한 5,552.74로 마감했습니다. 전날 반등했던 지수가 하루 만에 215.27포인트를 반납한 셈입니다.…

14시간 ago

2026년 11월 정보관리기술사·컴퓨터시스템응용기술사 시험 일정 (접수·시험·발표)

11월에 일정이 있는 정보관리기술사·컴퓨터시스템응용기술사 시험을 정리했습니다. 접수, 시험, 합격 발표 날짜를 한 번에 볼 수…

17시간 ago

환율 떨어지면 무조건 좋다고요? 2년 만에 1,328원, 교과서와 요즘 시장이 다르게 읽는 법

10월 20일 원·달러 환율이 1,328.1원으로 거래를 마쳤습니다(주간 종가 기준, 오후 3시 30분). 전날보다 2.2원 내려…

19시간 ago