[Oracle] COALESCE 함수 사용법 (NVL 여러개)
- 데이터베이스/오라클
- 2022. 2. 25.
오라클에서 NULL 값을 치환할 때는 NVL, NVL2, COALESCE 함수를 사용한다. COALESCE 함수는 NVL 함수의 기능이 조금 더 확장된 함수라고 생각하면 된다. NVL 함수와 동일하게 사용할 수도 있지만, 여러 개의 칼럼의 NULL 값을 판별해야 할 경우 NULL이 아닌 첫 번째 칼럼의 값을 반환할 때 유용하게 사용할 수 있다.
COALESCE(exp1, exp2, exp3, exp4 ...) 와 같이 함수의 인자의 개수는 동적으로 입력할 수 있다.
기본 사용법
WITH customers AS (
SELECT 1 AS c_id, 'Tammy Bryant' AS c_name, '010-1234-5678' AS tel_no1, '02-345-6789' AS tel_no2, NULL AS tel_no3 FROM dual UNION ALL
SELECT 2 AS c_id, 'Roy White' AS c_name, NULL AS tel_no1, '031-1234-8765' AS tel_no2, '070-4518-0987' AS tel_no3 FROM dual UNION ALL
SELECT 3 AS c_id, 'Gary Jenkins' AS c_name, '010-0987-6543' AS tel_no1, NULL AS tel_no2, NULL AS tel_no3 FROM dual
)
SELECT c_id
, c_name
, tel_no1
, tel_no2
, tel_no3
, COALESCE(tel_no1, tel_no2, tel_no3) AS coalesce_tel_no
FROM customers
COALESCE 함수에 입력된 인자 중에서 NULL이 아닌 첫 번째 칼럼의 값을 반환한다.
NVL 함수와 동일하게 사용 가능
SELECT c_id
, c_name
, tel_no1
, NVL(tel_no1, 'XXX-XXXX-XXXX') AS nvl_tel_no
, COALESCE(tel_no1, 'XXX-XXXX-XXXX') AS coalesce_tel_no
FROM customers
COALESCE 함수에 2개의 인자만 입력하면 NVL 함수와 동일한 결과를 반환한다.
2개의 인자만 입력한다면 NVL 함수를 사용하는 것이 가독성이 좋을 듯하다.
NVL 함수를 중첩으로 사용해야 할 경우 대체
SELECT c_id
, c_name
, NVL(tel_no1, NVL(tel_no2, tel_no3)) AS nvl_tel_no
, COALESCE(tel_no1, tel_no2, tel_no3) AS coalesce_tel_no
FROM customers
여러 개의 칼럼의 값 중에서 NULL이 아닌 값을 반환하기 위해서 NVL 함수를 중첩으로 사용해야 할 경우가 있다. 이럴 때는 COALESCE 함수를 사용하면 쿼리문을 간소화하고 가독성을 높일 수 있다.