1. COALESCE 함수란?
Oracle의 COALESCE 함수는 여러 인자 중 가장 첫 번째로 NULL이 아닌 값을 반환하는 SQL 표준 함수입니다. 데이터 정제, NULL 방지 처리, 보고서 출력 등에 매우 유용하며, NVL보다 더 유연한 다중 인자 처리가 가능하다는 장점이 있습니다.
기본 문법은 다음과 같습니다:
COALESCE(expr1, expr2, ..., exprN)
- expr1 ~ exprN: 평가 대상 값 목록
- NULL이 아닌 첫 번째 값을 반환
- 모든 값이 NULL일 경우 NULL 반환
2. 기본 사용 예제
아래 예제는 3개의 표현식 중 첫 번째 NULL이 아닌 값을 반환하는 간단한 사례입니다.
SELECT COALESCE(NULL, NULL, '대체값') AS result FROM DUAL;
결과:
RESULT
--------
대체값
3. 문자열 NULL 처리 예제
고객의 이메일, 연락처가 없을 경우 기본 연락처를 반환하는 예제입니다.
SELECT CUSTOMER_ID,
COALESCE(EMAIL, PHONE, '연락처 없음') AS CONTACT_INFO
FROM CUSTOMERS;
4. 숫자형 NULL 처리 예제
여러 수치 중 가장 우선순위가 높은 값을 선택하는 예제입니다.
SELECT PRODUCT_ID,
COALESCE(DISCOUNT_PRICE, SALE_PRICE, ORIGINAL_PRICE) AS FINAL_PRICE
FROM PRODUCTS;
DISCOUNT_PRICE가 NULL이면 SALE_PRICE, 그것도 NULL이면 ORIGINAL_PRICE를 반환합니다.
5. 날짜형 NULL 처리 예제
등록일, 수정일이 없을 경우 SYSDATE를 사용하는 예제입니다.
SELECT USER_ID,
COALESCE(MODIFIED_DATE, CREATED_DATE, SYSDATE) AS LAST_UPDATED
FROM USERS;
6. COALESCE vs NVL 비교
항목 | COALESCE | NVL |
---|---|---|
표준 여부 | ANSI SQL 표준 함수 | Oracle 전용 함수 |
인자 수 | 2개 이상 가능 | 정확히 2개 |
반환값 결정 | 첫 번째 NOT NULL | 첫 번째가 NULL일 경우 두 번째 반환 |
타입 자동 일치 | 서로 다른 타입도 허용(단, 반환값은 동일 타입) | 타입 일치 요구됨 |
7. 실무 활용 팁
- 여러 데이터 소스에서 동일 정보를 다르게 받을 때 유용
- 컬럼이 많고 우선순위가 명확한 경우 CASE보다 간결함
- ETL 과정에서 공란 보완, 데이터 정제 시 필수 함수
-- 고객 주소 우선순위: 배송지 > 청구지 > 기본 주소
SELECT USER_ID,
COALESCE(SHIPPING_ADDRESS, BILLING_ADDRESS, BASE_ADDRESS) AS SELECTED_ADDRESS
FROM USERS;
8. 성능 및 주의사항
- NULL 확인은 왼쪽부터 차례대로 수행되므로, 가장 가능성 높은 컬럼을 앞에 배치
- WHERE 절에 COALESCE 사용 시 인덱스 무력화 가능성 있음
- 서브쿼리 내에서는 명확한 반환 타입 설정 필요
9. 결론
COALESCE 함수는 Oracle에서 다중 NULL 처리를 가장 간결하게 할 수 있는 SQL 함수입니다. NVL보다 유연하며, 실무에서 흔히 마주치는 누락 데이터, 우선순위 처리, ETL, 보고서 로직 등 다양한 상황에서 활용됩니다. 특히 가독성과 유지보수성을 높이는 데 강력한 도구로 자리 잡고 있습니다.
출처
- Oracle 공식 문서: https://docs.oracle.com/en/
- Oracle SQL Language Reference: COALESCE Function
- 현업 활용 예제 기반 작성
'Database' 카테고리의 다른 글
[ Oracle] 오라클 CASE() 함수 사용법과 DECODE, IF-ELSE와의 차이점 비교 (0) | 2025.06.07 |
---|---|
[ Oracle] 오라클 DECODE() 함수로 IF-ELSE 로직을 SQL에서 구현하는 방법 (0) | 2025.06.07 |
[ Oracle] 오라클 NULLIF() 함수 완전 정복: 두 값 비교로 NULL 반환하는 방식 (0) | 2025.06.07 |
[ Oracle] 오라클 NVL() 함수로 NULL 값을 기본값으로 바꾸는 방법 (0) | 2025.06.07 |
[ Oracle] 오라클 NVL2() 함수로 NULL 유무에 따른 조건 처리 쉽게 구현하기 (0) | 2025.06.07 |