[DB] 단일행 내장 함수: NULL 관련

젠니·2023년 5월 27일
0

데이터베이스

목록 보기
12/21

5. NULL 관련 함수

COALESCE(e1,e2,..)

  • 숫자형 타입: 0으로 대체하거나 공백으로 비워둔다.
  • 문자형 타입: '***' 으로 대체한다.

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으로 출력한다.

COALSESCE() 함수 사용 시 주의사항

존재하는 튜플의 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를 출력할 수 있게된다.

NULLIF() 함수

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값이 출력된다.

profile
젠니의 개발 라이푸우

0개의 댓글