DB/PostgreSQL
[PostgreSQL] COALESCE, NULLIF, SIGN, IS DISTINCT FROM
불곰1
2021. 2. 28. 19:41
COALESCE와 NULLIF 두 함수는 유사한 동작을 하는 것 같지만 실제로는 다른 결과를 유발합니다.
COALESCE
COALESCE(X, Y)는 첫 파라미터인 X가 NULL이라면 Y를 반환하고 그렇지 않으면 X를 반환합니다.
select coalesce(null, '123');
-- '123'
select coalesce('1', '123');
-- '1'
NULLIF
NULLIF(X, Y)는 X와 Y가 같다면 NULL을 반환하고 그렇지 않으면 X를 반환합니다.
select nullif('1', '1');
-- null
select nullif('1', '2');
-- 1
select nullif(null, null);
-- null
SIGN
입력된 값이 양수면 1, 0이면 0, 음수면 -1을 반환합니다. 만약 null일 경우에는 null을 반환합니다.
select sign(123);
-- 1
select sign(0);
-- 0
select sign(-123);
-- -1
select sign(null);
-- null
IS DISTINCT FROM
어떤 값을 비교할 때 != 나 <> 연산자를 사용해 비교를 합니다.
SELECT *
FROM temp_table
WHERE address != '서울';
-- 또는 WHERE address <> '서울';
하지만 위 레코드 중 NULL이 존재하면 비교가 제대로 발생하지 않습니다. 이때 IS DISTINCT FROM 연산자를 사용해 쉽게 쿼리문을 만들 수 있습니다.
SELECT *
FROM temp_table
WHERE address IS DISTINCT FROM '서울';
-- 아래는 IS DISTINCT FROM 와 동일한 쿼리
SELECT *
FROM temp_table
WHERE address != '서울' OR address IS NULL;