Format
COALESCE (expr1, expr2, …)
Example
SELECT COALESCE(NULL, 1);
NULL을 1로 대체한다.
SELECT PLAYER_NAME,
COALESCE(POSITION, '*****') AS POSITION, // 문자형
COALESCE(HEIGHT, 0) AS HEIGHT // 숫자형
FROM PLAYER
WHERE TEAM_ID = 'K08';
SELECT PLAYER_NAME, E_PLAYER_NAME, NICKNAME,
COALESCE(E_PLAYER_NAME, NICKNAME) AS 별칭
FROM PLAYER;
이렇게 E_PLAYER_NAME이 NULL인 경우 NICKNAME으로 대체할 수 있다. NULL이 아닌 경우에는 E_PLAYER_NAME을 그냥 쓴다.
산술 연산에서 HEIGHT와 WEIGHT에서 NULL값 처리 여부에 따른 결과이다.
SELECT PLAYER_ID, PLAYER_NAME, HEIGHT, WEIGHT
FROM PLAYER;
SELECT PLAYER_ID, PLAYER_NAME, HEIGHT, WEIGHT,
(HEIGHT * 10) + WEIGHT AS TEST1,
(HEIGHT * 10) + COALESCE(WEIGHT,0) AS TEST2,
(COALESCE(HEIGHT,0) * 10) + COALESCE(WEIGHT,0) AS TEST3
FROM PLAYER;
TEST1의 경우, NULL값을 그대로 출력한다.
TEST2의 경우, WEIGHT만 NULL값을 0으로 출력한다.
TEST3의 경우, 둘다 NULL값을 0으로 출력한다.
존재하는 튜플의 NULL값을 리턴하는 것을 상관없지만, 조건에 맞는 튜플이 없는 경우 잘못된 접근이 일어난다.
SELECT COALESCE(HEIGHT,99999) AS HEIGHT
FROM PLAYER
WHERE PLAYER_NAME = '손흥민';
이 경우, 손흥민은 테이블에 없는 선수이기 때문에 아무 값도 나오지 않는다.
이럴 때는, 집계 함수를 사용해서 COALESCE() 함수를 적용한다.
SELECT MAX(HEIGHT)
FROM PLAYER
WHERE PLAYER_NAME = '손흥민';
이렇게 하면 NULL값이 나오기 때문에,
SELECT COALESCE(MAX(HEIGHT),99999) AS HEIGHT
FROM PLAYER
WHERE PLAYER_NAME = '손흥민';
이렇게 99999를 출력할 수 있게된다.
Format
NULLIF (expr1, expr2)
만약 expr1 = expr2 이면 NULL값을 리턴하고,
expr1 != expr2 이면 expr1을 리턴한다.
Example
SELECT TEAM_NAME, ORIG_YYYY,
NULLIF(ORIG_YYYY, 1983) AS NULLIF_1983
FROM TEAM;
1983년도면 NULL값이 출력된다.