🍋 ⚾️ 💻 🎬 🎮

Tech/SQL

[SQL] COALESCE

aeightchill 2025. 2. 8. 16:29
728x90

COALESCE

COALESCE() 함수는 여러 개의 인자 중에서 NULL이 아닌 첫 번째 값을 반환하는 함수
  값이 NULL일 경우 대체 값을 설정할 때 유용하다.


기본

COALESCE(value1, value2, ..., valueN)
  • 왼쪽부터 차례대로 NULL이 아닌 값을 찾고, 이를 반환
  • 모든 인자가 NULL이면 NULL을 반환
  • 최소 하나의 인자가 필요

 


NULL이 아닌 첫 번째 값 반환

SELECT COALESCE(NULL, NULL, 'Hello', 'World');

 

실행 결과 >

왼쪽부터 확인하여 NULL을 건너뛰고 3번쨰 'Hello'를 반환한다.

coalesce
Hello

 


NULL 대신 기본값 설정

SELECT COALESCE(NULL, 'Default Value');

 

실행 결과 >

NULL이므로 'Defaul Value'를 반환한다.

coalesce
Default Value

 

예시 : 고객 이메일이 없는 경우 기본 이메일 설정

SELECT name, COALESCE(email, 'no-email@example.com') AS email_address
FROM customers;

 

실행 결과>

name email_address
Bob bob@example.com
Pil no-email@example.com (table에 NULL값을 가짐)
Don don@example.com

 


NULL 값이 있는 컬럼끼리 대체

SELECT name, COALESCE(phone, mobile, 'No Contact') AS contact_number
FROM customers;

 

table >

name phone mobile
Ke NULL 010-1234-1234
Don NULL NULL

 

 

실행 결과 >

phone이 NULL이면 mobile을 사용하고, 둘 다 NULL이면 'No Contact' 반환한다.

name contact_number
Ke 010-1234-1234
Don No Contact

 

 

 


COALESCE() vs. CASE WHEN

CASE WHEN을 사용해도 같은 결과를 얻을 수 있지만, COALESCE()가 더 간결

 

COALESCE()  →   CASE WHEN으로 구현

-- COALESCE()
SELECT
  name,
  COALESCE(email, 'no-email@example.com') AS email_address
FROM customers;


-- CASE WHEN
SELECT 
  name, 
  CASE 
    WHEN email IS NOT NULL THEN email 
    ELSE 'no-email@example.com' 
  END AS email_address
FROM customers;

 

 


COALESCE() vs. NULLIF()

함수 역할
COALESCE(a, b, c) NULL이 아닌 첫 번째 값 반환
NULLIF(a, b) a와 b가 같으면 NULL 반환

 

NULLIF() 예제

SELECT NULLIF(10, 10), NULLIF(10, 20);

 

실행 결과 >

NULLIF(10,10) NULLIF(10,20)
NULL 10
  • NULLIF(10, 10)  →   두 값이 같으므로 NULL 반환
  • NULLIF(10, 20) →    두 값이 다르므로 10 반환

 

 

 

728x90

'Tech > SQL' 카테고리의 다른 글

[SQL] DATE_FORMAT (MySQL)  (0) 2025.04.06
[SQL] JOIN(조인)  (0) 2025.02.10
[SQL] ROUND, CEIL, FLOOR (반올림, 올림, 내림)  (0) 2025.02.08
[SQL] CASE WHEN  (0) 2025.02.08
[SQL] WITH AS (Common Table Expression, CTE)  (0) 2025.02.08