TIL: SQL의 COALESCE 함수 활용법


오늘 배운 것: COALESCE 함수

SQL에서 COALESCE는 주어진 표현식 목록에서 첫 번째로 NULL이 아닌 값을 반환하는 함수이다. 데이터베이스에서 누락된 데이터를 처리하거나 대체 값을 지정하는 데 유용하다.


1. 기본 구문

COALESCE(expression1, expression2, ..., expressionN)
  • expression1, expression2, ...: 평가할 표현식 목록.
  • 왼쪽에서 오른쪽으로 평가하며, 첫 번째 NULL이 아닌 값을 반환한다.
  • 모든 표현식이 NULL인 경우 NULL을 반환한다.

2. 기본 사용 예시

SELECT COALESCE(NULL, 'Value1', 'Value2') AS result;
-- 결과: 'Value1'

SELECT COALESCE(NULL, NULL, 'Value2') AS result;
-- 결과: 'Value2'

SELECT COALESCE(NULL, NULL, NULL) AS result;
-- 결과: NULL

3. NULL 값 대체하기

COALESCE는 NULL 값을 처리하거나, 특정 값을 대체하여 보다 깔끔한 결과를 제공한다.

3.1. NULL 값을 다른 값으로 대체

SELECT employee_id, 
       COALESCE(department, 'Not Assigned') AS department
FROM employees;
  • department 값이 NULL인 경우, **'Not Assigned'**로 대체.

결과 예시:

employee_id department

1 Sales
2 Not Assigned

3.2. 다중 열 비교

여러 열에서 값이 NULL인지 확인하고, 대체 값을 찾는다.

SELECT employee_id, 
       COALESCE(phone, email, 'No Contact Info') AS contact_info
FROM employees;
  • phone 값이 NULL이면, email을 확인하고, 둘 다 NULL이면 **'No Contact Info'**를 반환.

4. 데이터 타입 주의 사항

COALESCE는 반환 값의 데이터 타입을 가장 높은 우선순위를 가진 표현식의 데이터 타입으로 결정한다.

SELECT COALESCE(NULL, 100, 'Value') AS result;
-- 오류: 데이터 타입이 일치하지 않음 (숫자와 문자열 혼합)
  • 해결법: CAST 또는 CONVERT 사용
SELECT COALESCE(CAST(NULL AS VARCHAR), CAST(100 AS VARCHAR), 'Value') AS result;
-- 결과: '100'

5. COALESCE와 ISNULL, IFNULL 비교

  • ISNULL(expression, replacement): 특정 DBMS(MS SQL)에서만 사용되며, 2개의 인수를 비교.
  • IFNULL(expression, replacement): MySQL에서 동일한 기능 제공.
  • COALESCE(expression1, expression2, ..., expressionN): 표준 SQL 함수로, 다수의 표현식을 지원.

6. 응용 사례

6.1. 데이터 통합 및 보고서 생성

SELECT customer_id, 
       COALESCE(first_name, last_name, 'Anonymous') AS display_name
FROM customers;
  • 고객의 first_name이 NULL이면 last_name 사용. 둘 다 NULL이면 **'Anonymous'**로 대체.

6.2. 조건부 연산 최적화

SELECT product_id, 
       COALESCE(discount_price, regular_price) AS final_price
FROM products;
  • 할인 가격(discount_price)이 NULL인 경우 정가(regular_price)를 반환.

느낀 점

COALESCE는 데이터를 다루는 데 있어 강력하고 유연한 도구로, 특히 NULL 처리가 필요한 상황에서 효과적이다. 다양한 대체 옵션을 제공하며, 데이터의 신뢰성과 가독성을 높일 수 있었다.

+ Recent posts