CS

[SQLD] 일반 함수

2026년 02월 13일 16:59

SQLD 2과목 – 일반함수

일반 함수

1. NVL

  • NULL 값을 다른 값으로 치환
  • 대상 값과 치환 값은 서로 동일한 데이터 타입
NVL(대상, 치환값)
SELECT ENAME, COMM, NVL(COMM, 100) AS NEW_COMM
    FROM EMP
    WHERE DEPTNO = 30;
-- COMM 값이 NULL인 경우에는 100으로 치환
-- NULL이 아닌 경우에는 원래 값 유지

2. NVL2

  • 대상 값이 NULL인지 여부에 따라 서로 다른 값 반환
NVL2(대상, 그외치환값, 널치환값)

특징

  • 대상 값이 NULL이 아니면 첫번째 인수인 그외치환값 반환
  • 대상 값이 NULL이면 두번째 인수인 널치환값 반환
  • 반환되는 두 값은 서로 동일한 데이터 타입
SELECT ENAME, COMM, NVL2(COMM, '있음', '없음') AS 치환결과
    FROM EMP
    WHERE DEPTNO = 30;
-- COMM 값이 NULL인 경우에 없음으로 치환
-- COMM 값이 NULL이 아닌 경우에 있음으로 치환

3. COALESCE

  • NULL 값을 치환
  • NVL과 달리 두 개 이상의 인수 지정 가능
COALESCE(대상1, 대상2 [, 대상3] [, ...] )

특징

  • 나열된 값 중에서 가장 먼저 등장하는 NULL이 아닌 값을 반환
  • 모든 인수는 서로 호환 가능한 데이터 타입
SELECT STUDNO, SCORE1, SCORE2, SCORE3,
    COALESCE(SCORE1, SCORE2, SCORE3) AS RESULT
    FROM T_SCORE;
-- 나열된 값 중 가장 먼저 발견되는 NULL이 아닌 값 출력

4. NULLIF

  • 두 값을 비교하여 동일한 경우 NULL 반환
NULLIF(대상,)

특징

  • 두 값이 서로 같으면 NULL, 다르면 첫번째 값 반환
SELECT ENAME, SAL, COMM,
    NULLIF(COMM, 100) AS 결과1,
    NULLIF(COMM, 500) AS 결과2
    FROM EMP;
-- 결과1의 경우 COMM의 값이 100과 일치하는 행을 NULL로 변환
-- 결과2의 경우 COMM의 값이 500과 일치하는 행을 NULL로 변환

5. ISNULL

  • NULL값을 다른 값으로 치환
  • SQL Server에서만 제공
ISNULL(대상, 치환값)

특징

  • 대상 값이 NULL이면 치환값, NULL이 아니면 원래 값 반환
SELECT ENAME, SAL, COMM,
    ISNULL(COMM, 100)
    FROM EMP
-- COMM의 값이 NULL인 경우에 100으로 치환

6. DECODE

  • 조건에 따라 서로 다른 값을 반환
  • Oracle에서 제공
DECODE(대상1,1, 결과1 [,2] [, 결과2] [, ... 기본값])

특징

  • 대상값이 값1과 일치하면 결과1 반환
  • 대상값이 값2와 일치하면 결과2 반환
  • 기본값은 모든 조건에 일치하지 않을 경우 반환 (생략 시 NULL 반환)
SELECT DEPTNO,
    DECODE(DEPTNO, 10, '인사부', 20, '재무부')
    FROM EMP;
-- 부서번호가 10인 경우 인사부 반환
-- 부서번호가 20인 경우 재무부 반환
-- 그 외의 경우 NULL 반환

7. CASE문

  • 조건에 따라 서로 다른 결과 반환
  • 반드시 END 키워드로 마무리
  • 조건과 그에 대응하는 치환값 여러 개 전달 가능
CASE WHEN 조건1 THEN 결과1
    [WHEN 조건2 THEN 결과2]
    [....]
    [ELSE 기본값]
END [AS 컬럼별칭]

축약형

CASE 대상 WHEN1 THEN 결과1
        [WHEN2 THEN 결과2]
        [....]
        [ELSE 기본값]
END [AS 컬럼별칭]

특징

  • ELSE 절 생략 시 NULL이 반환
  • 모든 조건의 대상이 같고 항상 동등 비교 조건일 경우 축약형 사용 가능
  • 축약형 문법에서는 WHERE과 THEN 사이에 상수 값만 배치 가능
  • 축약형 문법에서 값과 결과의 데이터 타입이 일치하지 않으면 에러
SELECT SAL,
        CASE WHEN SAL < 2000 THEN 'C'
             WHEN SAL < 3000 THEN 'B'
                             ELSE 'A'
        END AS SAL_GRADE
    FROM EMP;
SELECT DEPTNO,
        CASE DEPTNO WHEN 10 THEN '인사부'
                    WHEN 20 THEN '총무부'
                    WHEN 30 THEN '재무부'
                            ELSE '기타'
        END AS DNAME1,
        CASE WHEN DEPTNO = 10 THEN '인사부'
             WHEN DEPTNO = 20 THEN '총무부'
             WHEN DEPTNO = 30 THEN '재무부'
                              ELSE '기타'
        END AS DNAME2
    FROM EMP;
[SQLD] 일반 함수 | Archive