SQL 기본 및 활용

SQL 함수 — 단일행 vs 집계, 그리고 NULL 처리 함정

CBT 전자문제집 편집팀
#SQLD#함수#단일행함수#집계함수#NVL#COALESCE#COUNT

함수는 값을 받아 가공한 결과를 돌려줍니다. SQLD에서는 함수가 행마다 결과를 내는지(단일행), 그룹당 하나를 내는지(집계) 를 구분하는 것과, NULL을 다루는 함수가 핵심입니다.

이 단원, 시험에서 어디에 나오나 (출제 비중)

  • 제2과목 「SQL 기본 및 활용」 = 40문항 · 80점. 함수는 SELECT·WHERE·GROUP BY 어디서나 쓰여, 다른 단원 문제 속에 섞여 나옵니다.
  • 특히 집계 함수의 NULL 처리COUNT의 차이는 결과표 예측 문제에서 자주 함정으로 등장합니다. (단원별 문항수는 공개되지 않습니다 — 출처: KDATA 출제기준.)

출제 포인트 — 시험이 실제로 묻는 것

  1. 단일행 함수 vs 집계(다중행) 함수 — 결과 개수 차이
  2. 집계 함수의 NULL 무시COUNT(*) vs COUNT(컬럼)
  3. NULL 처리 함수 NVL·COALESCE·NULLIF·CASE

① 단일행 함수 vs 집계 함수 — 결과 "개수"가 다르다

가장 기본 구분입니다. 단일행 함수는 행마다 1개씩, 집계 함수는 여러 행을 묶어 그룹당 1개를 냅니다.

단일행 함수는 입력 3행에 결과 3개를 내고, 집계 함수는 입력 3행을 묶어 결과 1개를 내며 그 과정에서 NULL을 무시함을 보여주는 도식

그림 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).

참고 출처

CBT 전자문제집 편집팀

자격증 개념과 기출 유형을 쉽게 정리합니다.

관련 글