Developer Diary/SQL

[SQL] NULL관련 함수

Lily0 2024. 3. 6. 19:17

NVL(인수1, 인수2) (Oracle 함수)

인수1이 NULL이면 인수2

인수1이 NULL이 아니면 인수1 리턴

SELECT NVL(컬럼명, '값'), NVL(컬럼명, NULL)
FROM 테이블명;
-- 결과
-- 컬럼 값 / '값'
-- 컬럼 값 / NULL

 

 

ISNULL(인수1, 인수2)

인수1이 NULL이면 인수2

인수1이 NULL이 아니면 인수1 리턴

SELECT ISNULL(컬럼명), ISNULL(변수), ISNULL(CASE WHEN 조건 THEN 값 END)
FROM 테이블명;
-- 결과
-- TRUE/FALSE
-- TRUE/FALSE
-- TRUE/FALSE

 

 

NULLIF(인수1, 인수2)

인수1과 인수2가 같으면 NULL

인수1과 인수2가 같지 않으면 인수1 리턴

SELECT NULLIF(컬럼명, '값'), NULLIF(컬럼명, NULL)
FROM 테이블명;
-- 결과
-- NULL / 컬럼 값
-- NULL / NULL

 

 

COALESCE(인수1, 인수2, 인수3, ...)

NULL이 아닌 최초의 인수 리턴

SELECT COALESCE(컬럼1, 컬럼2, '값'), COALESCE(컬럼1, NULL, '값')
FROM 테이블명;
-- 결과
-- 컬럼1 값 / 컬럼2 값 / '값'
-- 컬럼1 값 / NULL / '값'

 

 

NVL2(인수1, 인수2, 인수3)

인수1이 NULL이 아니면 인수2 리턴

인수1이 NULL이면 인수3 리턴

SELECT NVL2(컬럼명, '값1', '값2'), NVL2(컬럼명, NULL, '값')
FROM 테이블명;
-- 결과
-- 컬럼 값 / '값1' / '값2'
-- 컬럼 값 / NULL / '값'

 

 

CASE

복잡한 조건에 따라 다양한 결과를 반환할 때 유용하다.

SELECT CASE 컬럼명 WHEN '값1' THEN '결과1' WHEN '값2' THEN '결과2' ELSE '기본값' END
FROM 테이블명;
-- 결과
-- 결과1 / 결과2 / 기본값

별도의 ELSE가 없을 경우에는 NULL값이 DEFAULT 값이 된다.

 

 

DECODE (Oracle)

SELECT DECODE(컬럼명, '값1', '결과1', '값2', '결과2', '기본값') 
FROM 테이블명;
-- 결과
-- 결과1 / 결과2 / 기본값

인수의 개수가 짝수일 때 마지막 값이 DEFAULT 값이 된다.