2026 SQLD 필기 2과목 2장 2~3절 | 집합 연산·ROLLUP·CUBE·GROUPING — 핵심 이론
데이터위자드 ·
필기 · 핵심 이론
집합 연산은 두 SELECT의 결과를 세로로 결합하거나 공통·차집합을 구합니다. 그룹 확장 함수는 여러 수준의 합계를 한 결과에 만듭니다. 중복 유지 여부와 소계 NULL을 실제 결측과 구분하는 기준을 함께 익힙니다.
UNION과 UNION ALL · 교집합과 차집합 · ROLLUP의 계층 소계 · CUBE와 GROUPING SETS · GROUPING으로 소계 구분
1. UNION과 UNION ALL
UNION은 중복 결과 행을 제거하고 UNION ALL은 중복을 유지합니다. 양쪽 SELECT의 컬럼 수와 대응 자료형이 호환되어야 합니다. 열 이름이 같아야만 결합되는 것은 아니며 결과의 열 순서로 대응합니다.
중복을 유지해야 하는 거래 이력을 UNION으로 합치면 실제 두 거래가 하나처럼 보일 수 있습니다. 성능만이 아니라 결과 의미를 기준으로 선택하세요.
UNION ALL은 양쪽 결과의 중복을 유지한다.
예제로 적용하기
A결과 1,1과 B결과 1,2를 UNION과 UNION ALL로 결합한 행 수는?
풀이와 판단 과정
결론: 2행,4행
UNION은 1·2 두 값, UNION ALL은 1·1·1·2 네 행을 반환합니다.
2. 교집합과 차집합
INTERSECT는 두 결과의 공통 행, Oracle의 MINUS나 표준 계열의 EXCEPT는 왼쪽에만 있는 행을 반환합니다. 차집합은 방향이 있어 A-B와 B-A가 다를 수 있습니다. 제품별 지원 이름과 ALL 변형 지원을 구분해야 합니다.
기본적인 DISTINCT 집합 연산은 중복을 제거합니다. NULL 비교에서는 일반 WHERE의 = 비교와 집합 중복 판정 규칙을 혼동하지 않도록 실제 연산의 의미를 보세요.
차집합은 왼쪽 결과에서 오른쪽에 있는 값을 제외한다.
예제로 적용하기
A={1,2,3}, B={2,4}에서 A MINUS B는?
풀이와 판단 과정
결론: 1,3
A에 있으면서 B에 없는 1과 3이 남습니다.
3. ROLLUP의 계층 소계
ROLLUP(a,b)는 (a,b), (a), () 수준을 만듭니다. a·b별 상세 합계, a별 소계, 전체 총계입니다. 컬럼 순서를 바꾸면 중간 소계 기준이 바뀌므로 ROLLUP(b,a)와 동일하지 않습니다.
결과에 NULL이 보인다고 무조건 원본 결측값인 것은 아닙니다. 소계 표시를 위해 생긴 NULL과 원본 NULL을 구별하려면 GROUPING 함수를 활용합니다. 결과 정렬은 별도로 지정해야 합니다.
ROLLUP(a,b)는 (a,b), (a), 전체 총계 수준을 만든다.
예제로 적용하기
ROLLUP(지역,상품)에 기본적으로 포함되지 않는 수준은?
풀이와 판단 과정
결론: 상품만의 소계
ROLLUP은 왼쪽부터 계층을 유지하므로 상품만의 소계는 별도로 만들지 않습니다.
4. CUBE와 GROUPING SETS
CUBE(a,b)는 (a,b),(a),(b),()의 모든 조합 수준을 만듭니다. GROUPING SETS는 필요한 그룹 조합만 명시합니다. CUBE의 n개 컬럼은 최대 2의 n제곱 개 그룹 수준을 만들 수 있으므로 컬럼이 늘면 결과가 커집니다.
모든 조합이 필요한 것이 아니라면 GROUPING SETS((지역),(상품))처럼 요구 수준만 지정할 수 있습니다. 이 경우 전체 총계는 ()를 명시하지 않으면 자동 포함되는 것으로 가정하지 않습니다.
GROUPING SETS는 필요한 집계 수준을 명시적으로 선택한다.
예제로 적용하기
CUBE(a,b)의 그룹 수준 수는?
풀이와 판단 과정
결론: 4개
a,b를 포함하거나 제외하는 조합은 2²=4개입니다. 실제 결과 행 수는 각 그룹의 값 개수에 따라 달라집니다.
5. GROUPING으로 소계 구분
GROUPING(컬럼)은 해당 컬럼이 집계 수준에서 제외되어 소계 표시가 된 경우 1, 실제 그룹 컬럼인 경우 0을 반환합니다. 원본 데이터의 NULL이라도 실제 그룹 값으로 참여했다면 GROUPING=0입니다.
COALESCE(지역,전체)만 쓰면 원본 지역 미입력과 전체 총계를 같은 이름으로 표시할 수 있습니다. GROUPING을 CASE에서 사용하면 미입력과 소계를 구분한 라벨을 만들 수 있습니다.
소계 표시용 NULL은 GROUPING으로 원본 NULL과 구분할 수 있다.
예제로 적용하기
원본 지역=NULL인 그룹의 GROUPING(지역)과 전체 총계의 값은?
풀이와 판단 과정
결론: 0,1
원본 NULL도 실제 지역 그룹이므로 0, 집계에서 지역을 제외한 총계는 1입니다.
한눈에 비교하기
| 기능 | 중복·수준 | 판단 |
|---|---|---|
| UNION | 중복 제거 | 결과 행 전체 비교 |
| UNION ALL | 중복 유지 | 거래 이력 연결 |
| ROLLUP(a,b) | 상세+a소계+총계 | 순서에 의미 |
| CUBE(a,b) | 상세+a+b+총계 | 모든 조합 |
| GROUPING | 소계 표시 판정 | 원본 NULL과 구분 |
순서대로 풀어 보는 예제
서울·A10, 서울·B20, 부산·A30이라면 ROLLUP(지역,상품)은 상세 3행+지역소계 2행+총계 1행으로 6행입니다. CUBE는 상품별소계 A40·B20까지 더해 8행입니다.
지역에 NULL이 있는 실제 거래를 추가하면 표시만으로 소계와 구분하기 어려워집니다. CASE WHEN GROUPING(지역)=1 THEN 전체 ELSE ... END로 라벨을 정하고 최종 ORDER BY를 별도로 적습니다.
SELECT region, product, SUM(amount),
GROUPING(region) AS g_region, GROUPING(product) AS g_product
FROM sales
GROUP BY ROLLUP(region,product);헷갈리는 문장 바로잡기
UNION과 UNION ALL
잘못된 판단 UNION ALL은 자동으로 중복을 삭제한다.
올바른 판단: UNION ALL은 양쪽 결과의 중복을 유지한다.
교집합과 차집합
잘못된 판단 A MINUS B는 항상 B MINUS A와 같다.
올바른 판단: 차집합은 왼쪽 결과에서 오른쪽에 있는 값을 제외한다.
ROLLUP의 계층 소계
잘못된 판단 ROLLUP(a,b)는 b별 소계만 만든다.
올바른 판단: ROLLUP(a,b)는 (a,b), (a), 전체 총계 수준을 만든다.
CUBE와 GROUPING SETS
잘못된 판단 CUBE(a,b)는 항상 ROLLUP과 같은 세 수준이다.
올바른 판단: GROUPING SETS는 필요한 집계 수준을 명시적으로 선택한다.
GROUPING으로 소계 구분
잘못된 판단 GROUPING은 원본 값이 NULL이면 항상 1이다.
올바른 판단: 소계 표시용 NULL은 GROUPING으로 원본 NULL과 구분할 수 있다.
이론을 정리했다면 같은 절의 객관식 문제에서 조건과 예외를 확인하세요. 정답을 고른 뒤에는 틀린 선택지가 왜 성립하지 않는지도 설명해 보세요.
핵심 개념 확인 — 객관식 5문제
설명을 읽은 뒤 아래 다섯 문항을 풀어 보세요. 정답을 고르고 틀린 선택지의 오류도 설명할 수 있으면 이 단원의 기준을 이해한 것입니다.
문제 1
집합 연산·ROLLUP·CUBE·GROUPING에서 UNION과 UNION ALL에 대한 설명으로 옳은 것은?
- ① UNION ALL은 양쪽 결과의 중복을 유지한다.
- ② UNION은 컬럼 수가 달라도 자동 보정한다.
- ③ 집합 연산은 열 이름으로 자동 매칭한다.
- ④ UNION ALL은 자동으로 중복을 삭제한다.
정답과 해설 보기
정답 ①
UNION은 중복 결과 행을 제거하고 UNION ALL은 중복을 유지합니다. 양쪽 SELECT의 컬럼 수와 대응 자료형이 호환되어야 합니다. 열 이름이 같아야만 결합되는 것은 아니며 결과의 열 순서로 대응합니다. 중복을 유지해야 하는 거래 이력을 UNION으로 합치면 실제 두 거래가 하나처럼 보일 수 있습니다. 성능만이 아니라 결과 의미를 기준으로 선택하세요.
UNION ALL은 양쪽 결과의 중복을 유지한다.
문제 2
집합 연산·ROLLUP·CUBE·GROUPING에서 교집합과 차집합에 대한 설명으로 옳은 것은?
- ① 차집합은 왼쪽 결과에서 오른쪽에 있는 값을 제외한다.
- ② INTERSECT는 합집합이다.
- ③ A MINUS B는 항상 B MINUS A와 같다.
- ④ MINUS는 숫자 뺄셈 컬럼만 지원한다.
정답과 해설 보기
정답 ①
INTERSECT는 두 결과의 공통 행, Oracle의 MINUS나 표준 계열의 EXCEPT는 왼쪽에만 있는 행을 반환합니다. 차집합은 방향이 있어 A-B와 B-A가 다를 수 있습니다. 제품별 지원 이름과 ALL 변형 지원을 구분해야 합니다. 기본적인 DISTINCT 집합 연산은 중복을 제거합니다. NULL 비교에서는 일반 WHERE의 = 비교와 집합 중복 판정 규칙을 혼동하지 않도록 실제 연산의 의미를 보세요.
차집합은 왼쪽 결과에서 오른쪽에 있는 값을 제외한다.
문제 3
집합 연산·ROLLUP·CUBE·GROUPING에서 ROLLUP의 계층 소계에 대한 설명으로 옳은 것은?
- ① ROLLUP(a,b)는 (a,b), (a), 전체 총계 수준을 만든다.
- ② ROLLUP은 컬럼 순서와 무관하다.
- ③ ROLLUP은 결과를 항상 오름차순 보장한다.
- ④ ROLLUP(a,b)는 b별 소계만 만든다.
정답과 해설 보기
정답 ①
ROLLUP(a,b)는 (a,b), (a), () 수준을 만듭니다. a·b별 상세 합계, a별 소계, 전체 총계입니다. 컬럼 순서를 바꾸면 중간 소계 기준이 바뀌므로 ROLLUP(b,a)와 동일하지 않습니다. 결과에 NULL이 보인다고 무조건 원본 결측값인 것은 아닙니다. 소계 표시를 위해 생긴 NULL과 원본 NULL을 구별하려면 GROUPING 함수를 활용합니다. 결과 정렬은 별도로 지정해야 합니다.
ROLLUP(a,b)는 (a,b), (a), 전체 총계 수준을 만든다.
문제 4
집합 연산·ROLLUP·CUBE·GROUPING에서 CUBE와 GROUPING SETS에 대한 설명으로 옳은 것은?
- ① CUBE(a,b)는 항상 ROLLUP과 같은 세 수준이다.
- ② 그룹 수준 수와 실제 결과 행 수는 항상 같다.
- ③ GROUPING SETS에는 전체 총계만 적을 수 있다.
- ④ GROUPING SETS는 필요한 집계 수준을 명시적으로 선택한다.
정답과 해설 보기
정답 ④
CUBE(a,b)는 (a,b),(a),(b),()의 모든 조합 수준을 만듭니다. GROUPING SETS는 필요한 그룹 조합만 명시합니다. CUBE의 n개 컬럼은 최대 2의 n제곱 개 그룹 수준을 만들 수 있으므로 컬럼이 늘면 결과가 커집니다. 모든 조합이 필요한 것이 아니라면 GROUPING SETS((지역),(상품))처럼 요구 수준만 지정할 수 있습니다. 이 경우 전체 총계는 ()를 명시하지 않으면 자동 포함되는 것으로 가정하지 않습니다.
GROUPING SETS는 필요한 집계 수준을 명시적으로 선택한다.
문제 5
집합 연산·ROLLUP·CUBE·GROUPING에서 GROUPING으로 소계 구분에 대한 설명으로 옳은 것은?
- ① 소계 표시용 NULL은 GROUPING으로 원본 NULL과 구분할 수 있다.
- ② GROUPING은 NULL을 모두 삭제한다.
- ③ GROUPING은 원본 값이 NULL이면 항상 1이다.
- ④ 소계에는 반드시 문자열 전체가 자동 입력된다.
정답과 해설 보기
정답 ①
GROUPING(컬럼)은 해당 컬럼이 집계 수준에서 제외되어 소계 표시가 된 경우 1, 실제 그룹 컬럼인 경우 0을 반환합니다. 원본 데이터의 NULL이라도 실제 그룹 값으로 참여했다면 GROUPING=0입니다. COALESCE(지역,전체)만 쓰면 원본 지역 미입력과 전체 총계를 같은 이름으로 표시할 수 있습니다. GROUPING을 CASE에서 사용하면 미입력과 소계를 구분한 라벨을 만들 수 있습니다.
소계 표시용 NULL은 GROUPING으로 원본 NULL과 구분할 수 있다.
범위 확인
2026년 학습 범위를 기준으로 구성했습니다. 시험 시행기관의 자격 안내·출제 기준에서 과목과 변경 공지를 확인할 수 있습니다.
SQLD 전체 목차
과목별 이론
- 1과목 · 1장 1~3절 · 데이터 모델·엔터티·속성
- 1과목 · 1장 4~5절 · 관계·식별자와 카디널리티
- 1과목 · 2장 1~3절 · 정규화·조인·트랜잭션 모델
- 1과목 · 2장 4~5절 · NULL·본질식별자·인조식별자
- 2과목 · 1장 1~2절 · 관계형 DB와 SELECT·DISTINCT
- 2과목 · 1장 3절 · 문자·숫자 함수와 CASE
- 2과목 · 1장 4절 · WHERE·날짜 범위·연산자 우선순위
- 2과목 · 1장 5~6절 · 집계·GROUP BY·HAVING·ORDER BY
- 2과목 · 1장 7~8절 · INNER·OUTER·표준 조인
- 2과목 · 2장 1절 · 서브쿼리·EXISTS·스칼라 서브쿼리
- 2과목 · 2장 2~3절 · 집합 연산·ROLLUP·CUBE·GROUPING
- 2과목 · 2장 4~5절 · 윈도우 함수·순위·Top N
- 2과목 · 2장 6~8절 · 계층형 질의·셀프 조인·PIVOT·정규표현식
- 2과목 · 3장 1~2절 · DML·TCL과 트랜잭션
- 2과목 · 3장 3~4절 · DDL·DCL·제약조건·권한
단원별 객관식
- 1과목 · 1장 1~3절 · 데이터 모델·엔터티·속성
- 1과목 · 1장 4~5절 · 관계·식별자와 카디널리티
- 1과목 · 2장 1~3절 · 정규화·조인·트랜잭션 모델
- 1과목 · 2장 4~5절 · NULL·본질식별자·인조식별자
- 2과목 · 1장 1~2절 · 관계형 DB와 SELECT·DISTINCT
- 2과목 · 1장 3절 · 문자·숫자 함수와 CASE
- 2과목 · 1장 4절 · WHERE·날짜 범위·연산자 우선순위
- 2과목 · 1장 5~6절 · 집계·GROUP BY·HAVING·ORDER BY
- 2과목 · 1장 7~8절 · INNER·OUTER·표준 조인
- 2과목 · 2장 1절 · 서브쿼리·EXISTS·스칼라 서브쿼리
- 2과목 · 2장 2~3절 · 집합 연산·ROLLUP·CUBE·GROUPING
- 2과목 · 2장 4~5절 · 윈도우 함수·순위·Top N
- 2과목 · 2장 6~8절 · 계층형 질의·셀프 조인·PIVOT·정규표현식
- 2과목 · 3장 1~2절 · DML·TCL과 트랜잭션
- 2과목 · 3장 3~4절 · DDL·DCL·제약조건·권한
실습
- SQL 학습 실습 1 · 6작업 · SELECT·조건·정렬
- SQL 학습 실습 2 · 6작업 · NULL·COUNT·평균
- SQL 학습 실습 3 · 6작업 · 날짜 범위·문자 조건
- SQL 학습 실습 4 · 6작업 · GROUP BY·HAVING·조건부 합계
- SQL 학습 실습 5 · 6작업 · 조인·행 수·미주문 고객
- SQL 학습 실습 6 · 6작업 · 서브쿼리·EXISTS·NOT EXISTS
- SQL 학습 실습 7 · 6작업 · 순위·동률·고객별 Top N
- SQL 학습 실습 8 · 6작업 · 집합 연산·조건부 피벗·전체 검산