NULL 처리 함수는 NULL
값을 다른 값으로 치환하여 계산이나 결과에 NULL
이 포함되지 않도록 하는 데 사용됩니다. SQLD 시험에서는 DBMS별 함수 차이와 함께 SUM
또는 AVG
와 같은 집계 함수와 결합하여 출제되는 경우가 많습니다.
함수 | DBMS | 형식 | 기능 |
---|---|---|---|
NVL | Oracle | NVL(expr1, expr2) | expr1 이 NULL 이면 expr2 반환. |
ISNULL | SQL Server | ISNULL(expr1, expr2) | expr1 이 NULL 이면 expr2 반환. |
COALESCE | ANSI 표준 | COALESCE(expr1, expr2, ...) | 첫 번째 NULL 이 아닌 값을 반환. |
NVL
**은 Oracle 전용입니다. 두 개의 인자만 받으며, 인자들의 데이터 타입이 동일해야 합니다.ISNULL
**은 SQL Server 전용입니다.COALESCE
**는 ANSI 표준으로, 여러 개의 인자를 받을 수 있으며 가장 범용적입니다.SUM
, AVG
같은 집계 함수는 NULL
값을 계산에서 자동으로 제외합니다.SELECT SUM(bonus) FROM Employees;
bonus
컬럼이 모두 NULL
일 경우 결과는 **NULL
**이 됩니다.SELECT SUM(NVL(bonus, 0)) FROM Employees;
NULL
값을 0
으로 치환하므로, NULL
대신 0
이 합산되어 결과는 **0
**이 됩니다.SUM(NVL(컬럼, 0))
과 SUM(컬럼)
의 결과 차이를 묻는 문제가 자주 출제됩니다.CASE
문으로 대체 가능NVL(salary, 0)
은 CASE WHEN salary IS NULL THEN 0 ELSE salary END
와 동일한 기능을 수행합니다. 이는 NULL 처리 함수의 원리를 이해하는 데 도움이 됩니다.NVL
→ **N
**ull **V
**alue **L
**ogic → 오라클
전용!COALESCE
→ **C
**heck **O
**n ALL
the S
tuff → 모든
인자를 확인!SUM(NULL)
= NULL
! SUM(NVL(NULL, 0))
= 0
!1. 다음 중 Oracle 환경에서 salary
가 NULL
인 경우 0
으로 처리하려면 어떤 함수를 사용해야 하는가?
A. ISNULL
B. COALESCE
C. NVL
D. IFNULL
2. Employees
테이블의 bonus
컬럼 값이 모두 NULL
일 때, 다음 쿼리들의 실행 결과로 올바른 조합은?
SELECT SUM(bonus) AS total_bonus, SUM(NVL(bonus, 0)) AS total_bonus_fixed FROM Employees;
A. NULL
, 0
B. 0
, NULL
C. NULL
, NULL
D. 0
, 0
3. 다음 중 COALESCE(col1, col2, 0)
의 의미로 가장 알맞은 것은?
A. col1
과 col2
의 값을 더한 후 NULL
이면 0
을 반환한다.
B. col1
이 NULL
이 아니면 col1
, 아니면 col2
를 반환하고, col1
과 col2
모두 NULL
이면 0
을 반환한다.
C. col1
과 col2
중 더 큰 값을 반환하고, 모두 NULL
이면 0
을 반환한다.
D. col1
, col2
가 모두 NULL
일 경우에만 0
을 반환한다.
4. 다음 설명 중 틀린 것은?
A. NVL
은 Oracle에서만 사용 가능한 함수다.
B. COALESCE
는 여러 인자 중 첫 번째 NULL
이 아닌 값을 반환한다.
C. SUM(NVL(col, 0))
은 col
이 모두 NULL
일 경우 0
을 반환한다.
D. SUM(col)
은 NULL
값을 0
으로 간주하여 합산한다.
NVL
은 Oracle 전용 NULL 처리 함수입니다.SUM(bonus)
는 NULL
을 계산하지 않으므로 결과가 NULL
이 됩니다. SUM(NVL(bonus, 0))
은 NULL
을 0
으로 치환하여 합산하므로 결과는 0
이 됩니다.COALESCE
는 왼쪽부터 순서대로 NULL
이 아닌 첫 번째 값을 반환합니다.SUM
함수는 NULL
값을 0
으로 간주하지 않고, 계산에서 제외합니다.