핵심 요약
핵심 판단
- Oracle
NVL(a,b), SQL ServerISNULL(a,b)는 두 인자 NULL 대체다. - 표준
COALESCE는 여러 후보 중 첫 NULL 아닌 값을 고른다. NULLIF(a,b)는 두 값이 같으면 NULL이다.DECODE는 Oracle의 등치 비교 중심 함수이고CASE는 범위·복합 조건도 표현한다.
헷갈리는 개념 비교
| 함수 | 의미 |
|---|---|
NVL(a,b) | a가 NULL이면 b |
NVL2(a,b,c) | a가 NULL이 아니면 b, 아니면 c |
NULLIF(a,b) | a=b이면 NULL, 아니면 a |
COALESCE(a,b,c) | 처음 만나는 NULL이 아닌 값 |
대표 예제
COALESCE(c1,c2,c3)는 왼쪽부터 첫 NULL 아닌 값을 행마다 고른다. 예를 들어 (1,2,3), (NULL,2,3), (NULL,NULL,3)의 결과는 1, 2, 3이며 합은 6이다.
학습 목표
- 명시적 형변환 함수와 NULL 처리 함수의 차이를 설명한다.
- CASE를 사용해 조건별 값을 안전하게 계산한다.
본문
개념 지도
입력 값과 타입 확인→함수 적용→NULL·NLS·형변환 확인→결과 타입 검증핵심 내용
TO_CHAR, TO_NUMBER, TO_DATE는 데이터 타입을 명시적으로 바꾼다. 날짜 문자열은 형식 모델까지 함께 적어 세션 설정의 영향을 줄인다.
TO_DATE('2026-07-22', 'YYYY-MM-DD')
TO_CHAR(order_dt, 'YYYY-MM')
NULL 관련 함수는 목적이 다르다.
개념 비교표는 핵심 요약에서 확인한다.
CASE는 표준 SQL의 조건 표현식이며 단순 CASE와 검색 CASE가 있다. Oracle의 DECODE는 등치 비교 중심의 함수다.
CASE WHEN score >= 80 THEN 'PASS' ELSE 'RETRY' END
명시적 형변환 예
SELECT TO_CHAR(order_date, 'YYYY-MM-DD') AS ymd,
TO_NUMBER(:amount_text, '999999D99',
'NLS_NUMERIC_CHARACTERS=''.,''') AS amount
FROM orders;
Format과 NLS를 명시하지 않으면 Session 환경에 따라 결과가 달라질 수 있다. 저장·조인 Key에는 표시용 문자열보다 원본 DATE·
NVL· COALESCE· CASE
CASE
WHEN score >= 90 THEN 'A'
WHEN score >= 80 THEN 'B'
ELSE 'C'
END
CASE는 조건을 위에서부터 평가하므로 범위가 겹치지 않게 배치한다. NVL은 두 인수의 타입 변환 규칙 때문에 예상치 못한 변환이 생길 수 있고, COALESCE는 여러 후보에서 첫 non-NULL을 선택한다.
-- NULL과 0을 같은 업무값으로 볼 때만 사용
NVL(discount_amount, 0)
NULL 안전 비교
두 Nullable Column을 같다고 볼 때는 a=b OR (a IS NULL AND b IS NULL)처럼 의미를 명시한다. 단순 NVL(a, sentinel)=NVL(b,sentinel)은 sentinel이 실제 값과 충돌할 수 있다.
조건 함수 작성 원칙
WHERE에서 CASE·
시험 포인트
SELECT team_id,
SUM(CASE WHEN position = 'FW' THEN 1 ELSE 0 END) fw,
SUM(CASE WHEN position = 'MF' THEN 1 ELSE 0 END) mf,
COUNT(*) total
FROM player
GROUP BY team_id;
CASE에서 조건이 거짓이고 ELSE가 없으면 NULL을 반환한다. SUM은 NULL을 제외하므로 해당 포지션이 한 건도 없는 팀은 SUM 결과가 NULL이 될 수 있다. ELSE 0을 쓰거나 바깥에서 NVL(amount, 0)·SQL Server ISNULL(amount, 0)로 0을 만든다.
대표 예제는 핵심 요약에서 확인한다.
이름이 비슷한 함수 구분
판단 기준은 핵심 요약의 핵심 판단에서 확인한다.
문자열 결합에 NULL이 포함될 때의 결과는 DBMS와 함수에 따라 다를 수 있으므로 문제의 환경을 확인한다.
자주 틀리는 부분
- NVL의 두 인자는 반환 타입을 맞추기 위한 변환이 일어날 수 있으므로 타입을 확인한다.
- NULL끼리의 일반 비교는 TRUE가 아니므로 CASE 조건에서도
IS NULL을 사용한다. - 조건 함수로 0 나눗셈을 피할 때 실제 평가 대상과 반환 타입을 함께 점검한다.
복습 문제
답을 생각한 뒤 정답과 근거를 펼쳐 보세요.
여러 후보 중 첫 NULL 아닌 값을 고르는 함수는?
정답과 근거
COALESCE가 왼쪽부터 첫 번째 NULL 아닌 값을 고릅니다.
COALESCE(c1,c2,c3)는 왼쪽부터 첫 NULL 아닌 값을 행마다 고른다. 예를 들어 (1,2,3), (NULL,2,3), (NULL,NULL,3)의 결과는 1, 2, 3이며 합은 6이다.
NULLIF(10,10)의 결과는?
정답과 근거
두 값이 같으므로 NULL을 반환합니다.
COALESCE(a,b,c)와 NVL(a,b)의 후보 수·결과 타입 판단에서 주의할 점은 무엇인가?
정답과 근거
COALESCE는 둘 이상의 후보를 받을 수 있고 NVL은 두 인수만 받습니다. Oracle에서는 두 함수의 타입 결정과 암시적 변환 규칙이 같다고 가정하지 말고 후보 타입을 명시적으로 맞춥니다.
COALESCE(c1,c2,c3)는 왼쪽부터 첫 NULL 아닌 값을 행마다 고른다. 예를 들어 (1,2,3), (NULL,2,3), (NULL,NULL,3)의 결과는 1, 2, 3이며 합은 6이다.