SQL
[불친절한SQL] 기초쿼리, 널 관련 함수
Darren Gwon
2022. 12. 3. 16:54
반응형
○ 널 관련 함수
NULL을 처리하는 함수다.
NVL 함수
expr1이 널이 아니면 expr1, 널이면 expr2를 반환한다.
NVL(expr1, expr2)
SELECT NVL(1, 2) AS c1, NVL (NULL, 2) AS c2 FROM DUAL;
SELECT ename, sal, comm, sal + comm AS c1, sal + NVL(comm, 0) AS c2 FROM emp;
NVL2 함수
expr1이 널이 아니면 expr2, 널이면 expr3를 반환한다.
삼항 연산자와 유사하다고 느껴진다.
NVL2(expr1, expr2, expr3)
SELECT NVL2(1, 2, 3) AS c1, NVL2(NULL, 2, 3) AS c2 FROM DUAL;
SELECT ename, sal, comm, sal + (sal * NVL2(comm, 0.1, 0.2)) AS c1 FROM emp;
COALESCE 함수
NULL이 아닌 첫 번째 expr을 반환한다.
SELECT COALESCE(1, 2, 3) AS c1, COALESCE(NULL, 2, 3) AS c2
, COALESCE(NULL, NULL, 3) AS c3
FROM DUAL;
NVL, NVL2 함수는 모든 인수를 평가한다. 이로 인해 에러나 부하가 발생할 수 있다.
아래에서 NVL 함수를 사용한 쿼리는 에러가 발생했다. 평가할 필요가 없는 1/0을 평가 했기 때문이다.
COALESCE 함수를 사용한 쿼리는 에러가 발생하지 않는다.
--SELECT NVL(1, 1/0) AS c1 from DUAL; --에러 ORA-01476: 제수가 0 입니다
SELECT COALESCE (1, 1/0) AS c1 FROM DUAL;
--SELECT NVL2(1, 2, 1/0) AS c1 from DUAL; --에러 ORA-01476: 제수가 0 입니다
SELECT DECODE(1, NULL, 1/0, 2) AS c1 FROM DUAL;
SELECT CASE WHEN 1 IS NULL THEN 1/0 ELSE 2 END AS c1 FROM DUAL;
NULLIF 함수
expr1과 expr2가 다르면 expr1을 반환하고 다르면 NULL을 반환한다.
NULLIF(expr1, expr2)
SELECT NULLIF(1, 1) AS c1, NULLIF(1, 2) AS c2 FROM DUAL;
반응형