함수는 값을 받아 가공한 결과를 돌려줍니다. SQLD에서는 함수가 행마다 결과를 내는지(단일행), 그룹당 하나를 내는지(집계) 를 구분하는 것과, NULL을 다루는 함수가 핵심입니다.
이 단원, 시험에서 어디에 나오나 (출제 비중)
- 제2과목 「SQL 기본 및 활용」 = 40문항 · 80점. 함수는 SELECT·WHERE·GROUP BY 어디서나 쓰여, 다른 단원 문제 속에 섞여 나옵니다.
- 특히 집계 함수의 NULL 처리와 COUNT의 차이는 결과표 예측 문제에서 자주 함정으로 등장합니다. (단원별 문항수는 공개되지 않습니다 — 출처: KDATA 출제기준.)
출제 포인트 — 시험이 실제로 묻는 것
- 단일행 함수 vs 집계(다중행) 함수 — 결과 개수 차이
- 집계 함수의 NULL 무시와
COUNT(*)vsCOUNT(컬럼) - NULL 처리 함수
NVL·COALESCE·NULLIF·CASE
① 단일행 함수 vs 집계 함수 — 결과 "개수"가 다르다
가장 기본 구분입니다. 단일행 함수는 행마다 1개씩, 집계 함수는 여러 행을 묶어 그룹당 1개를 냅니다.
그림 1. 단일행 함수(LENGTH 등)는 3행 → 3결과, 집계 함수(SUM 등)는 3행 → 1결과. 집계는 NULL을 빼고 계산합니다. (자작 도식)
| 구분 | 결과 개수 | 예 |
|---|---|---|
| 단일행 함수 | 행마다 1개 | LENGTH·SUBSTR·ROUND·NVL |
| 집계 함수 | 그룹당 1개 | COUNT·SUM·AVG·MAX·MIN |
② 집계 함수는 NULL을 무시 — COUNT의 두 얼굴
집계 함수는 NULL을 빼고 계산합니다. 그래서 COUNT(컬럼) 은 NULL이 아닌 값만 세고, COUNT(*) 는 행 수를 셉니다.
-- 수당 컬럼 값: [100, NULL, 300] (3행)
SELECT COUNT(*) FROM 사원; -- 3 (행 수)
SELECT COUNT(수당) FROM 사원; -- 2 (NULL 제외)
SELECT SUM(수당) FROM 사원; -- 400
SELECT AVG(수당) FROM 사원; -- 200 (400 / 2, 분모도 2!)
함정:
AVG(수당)의 분모는 3이 아니라 NULL을 뺀 2입니다. NULL을 0으로 세려면AVG(NVL(수당, 0))을 써야 합니다.
③ NULL을 다루는 함수
| 함수 | 동작 |
|---|---|
NVL(A, B) | A가 NULL이면 B, 아니면 A |
NVL2(A, B, C) | A가 NULL 아니면 B, NULL이면 C |
COALESCE(A, B, …) | 처음으로 NULL이 아닌 값 |
NULLIF(A, B) | A = B이면 NULL, 아니면 A |
SELECT NVL(수당, 0), -- 수당 없으면 0
COALESCE(수당, 상여, 0), -- 수당→상여→0 순으로 첫 값
NULLIF(등급, '없음') -- 등급이 '없음'이면 NULL
FROM 사원;
한 장 정리 (암기 카드)
- 단일행 = 행마다 1결과(LENGTH·NVL), 집계 = 그룹당 1결과(SUM·COUNT).
- 집계는 NULL 무시.
COUNT(*)=행 수,COUNT(컬럼)=NULL 제외,AVG분모도 NULL 제외. - NULL 처리:
NVL(치환)·NVL2·COALESCE(첫 NOT NULL)·NULLIF(같으면 NULL).
참고 출처
- 시험 과목·배점: 한국데이터산업진흥원(KDATA) 데이터자격검정 (2026년 7월 확인)
- 함수 분류·NULL 처리 동작은 오라클 SQL·표준 SQL에 근거하며, 본문 설명·도식·예시는 자작입니다.