2024. 8. 20. 17:52ㆍLanguage/SQL
해당 함수는 NULL 값을 대체하기 위해 사용한다 배워 찾아보니 해당 목적이 주가 아니어서 이렇게 따로 정리하게 되었다. 물론 NULL 값 대체의 기능을 가지고 있지만 본디 주 목적은 두 컬럼을 합치는 기능을 하는 함수라고 한다.
1. 기본 문법
SELECT COALESCE(병합컬럼명1, 병합컬럼명2) 별명, // 방법 - 1
COALESCE(값1, 값2) 별명 // 방법 - 2
FROM 테이블명
해당 함수의 작동 기준은 NULL 이다. 두 컬럼을 지정하면 아래와 같은 결과를 보인다.
- 두 컬럼 값이 모두 NULL 일 경우 : NULL 이 병합컬럼 값이 됨
- 두 컬럼 중 하나의 컬럼 값이 NULL 인 경우 : NULL 아닌 쪽의 컬럼 값이 병합컬럼 값이 됨
- 두 컬럼 값이 모두 NULL 이 아닌 경우 : 먼저 지정한 컬럼 값이 병합컬럼 값이 됨
또한 컬럼뿐만 아니라 특정 값을 지정해서도 사용이 가능하다. '값1, 값2' 를 지정해 사용한 경우에도 위에 설명한 것과 동일하게 작동한다(물론 컬럼과 값을 섞어 지정해 사용하는 경우도 가능).
2. 사용 예시
'food_orders' 와 'customers' 테이블을 JOIN 하여 데이터를 확인하던 중 고객의 이름(name)과 나이(age)가 NULL 인 다수의 레코드를 확인했다. 이 때, 해당 NULL 값들을 이름의 경우에는 "이름없음" 으로 나이인 경우에는 '20' 으로 바꿔 결과를 출력해보자.
SELECT a.order_id, a.customer_id, a.restaurant_name, b.name, b.age,
COALESCE(name, '이름없음') '이름 NULL제거', COALESCE(age, '20') '나이 NULL제거'
FROM food_orders a LEFT JOIN customers b ON a.customer_id = b.customer_id
WHERE b.age IS NULL OR b.name IS NULL // 데이터양이 많아 NULL 을 갖는 데이터만 추리기 위해 사용
현재 DB 에 테스트 데이터가 너무 많아 부득이하게 'name' 또는 'age' 에 NULL 값을 갖는 레코드들만을 추려 예제를 진행하였다. COALESCE 를 사용했기에 기존 컬럼들의 값이 모두 NULL 이라 병합컬럼의 값들이 모두 지정한 "이름없음" 과 '20' 인 것을 확인 할 수 있다.
혹시나 하는 마음에 WHERE 의 조건을 지우고 'name' 과 'age' 에 NULL 이 아닌 값이 있는 경우도 한 번 확인 해보았다. COALESCE 사용 시 첫 번 째로 지정한 'name' 과 'age' 의 값들이 NULL 아니어서 해당 컬럼(age, name)의 값이 병합컬럼 값인 것을 확인 할 수 있었다.
'Language > SQL' 카테고리의 다른 글
[SQL] 날짜/시간 데이터 포맷 다루기 - DATE, TIME, DATE_FORMAT (0) | 2024.08.21 |
---|---|
[SQL] WINDOWS FUNCTION - RANK (0) | 2024.08.21 |
[SQL] 테이블 합치기 - JOIN (0) | 2024.08.19 |
[SQL] 날짜/시간 데이터 다루기 - YEAR, MONTH, DAY, HOUR, MINUTE, SECOND, NOW, CURRENT_DATE, CURRENT_TIME (0) | 2024.08.18 |
[SQL] Query 안의 Query - SubQuery (0) | 2024.08.18 |