DB에서의 NULL을 알아보자 !!
Oracle, Tibero, MSSQL에서 NULL은 없는값이 아니라 모르는값이다.
그래서 AAA = NULL이 아니고 AAA IS NULL인 것이다.
그렇기 때문에 없다면 ‘ ’(스페이스)를 넣어야 된다 ! 처음에는 왜 스페이스를 넣는가 했는데 이유가 있었다..!!!
Oracle과 Tibero에서는 컬럼에 ‘’과 NULL은 같습니다. (‘' : 스페이스 없는 따옴표 열고닫고 )
SELECT CASE WHEN ‘’ IS NULL THEN ‘NULL’ ELSE ‘NOT NULL’ END
FROM dual;
: 위 쿼리의 결과는 NULL이다.
가끔 NOT IN이나 NOT LIKE를 사용하여 해당되지 않은 값은 빼고 조회할 때, NULL과 ‘’인값은 안 나오니 주의.
하지만 MSSQL은 NULL과 ‘’을 구분해서 사용합니다.
DB마다 NULL 체크하는 함수명이 각각 다르니 이 점도 정리해봅시다 !
데이터베이스 시스템마다 NULL값을 대체하는 함수가 다릅니다.
이 함수들은 모두 동일한 사용법을 갖고 있으며, "값"과 "지정값"을 인자로 받아 첫 번째 인자가 NULL일 경우 두 번째 인자로 대체합니다. 각 데이터베이스에서의 사용법을 명확히 정리해보겠습니다.
Oracle : NVL 함수
: Oracle에서는 'NVL' 함수를 사용합니다. 첫 번째 인자가 NULL일 경우 두 번째 인자로 대체합니다.
SELECT NVL(cnt, 0) AS cnt
FROM TABLE_DB;
MySQL : IFNULL 함수
: MySQL에서는 'IFNULL' 함수를 사용합니다. 첫 번째 인자가 NULL일 경우 두 번째 인자로 대체합니다.
SELECT IFNULL(cnt, 0) AS cnt
FROM TABLE_DB;
※ 유의사항 : MySQL에는 'ISNULL' 함수도 있지만, 이는 NULL 체크의 용도로 사용되지 않고,
해당 컬럼이 NULL인지 여부를 확인하여 참(True) 또는 거짓(False)을 반환합니다.
Microsoft SQL Server (MSSQL): ISNULL 함수
: MSSQL에서는 'ISNULL' 함수를 사용합니다. 첫 번째 인자가 NULL일 경우 두 번째 인자로 대체합니다.
SELECT ISNULL(cnt, 0) AS cnt
FROM TABLE_DB;
각 함수의 사용법은 동일하지만, 데이터베이스마다 함수명이 다르므로 주의해야 합니다.
특히, MySQL에서 'ISNULL' 함수는 NULL값을 대체하는 데 사용되지 않으며,
해당 값이 NULL인지 여부를 확인하여 0 또는 1을 반환합니다.
추가 예제로 이해를 높여봅시다.
-- Oracle 예제
-- NVL을 사용하여 NULL 값을 0으로 대체
SELECT NVL(salary, 0) AS salary
FROM employees;
-- MySQL 예제
-- IFNULL을 사용하여 NULL 값을 'N/A'로 대체
SELECT IFNULL(department, 'N/A') AS department
FROM employees;
-- MSSQL 예제
-- ISNULL을 사용하여 NULL 값을 현재 날짜로 대체
SELECT ISNULL(hire_date, GETDATE()) AS hire_date
FROM employees;
이와 같이 , 데이터베이스별 NULL값을 대체하는 함수를 정확히 이해하고 사용하는 것은 매우 중요합니다.
이를 통해 데이터 무결성을 유지하고, NULL 값으로 인해 발생할 수 있는 오류를 방지할 수 있습니다.
'DB > SQL' 카테고리의 다른 글
[SQL] MariaDB와 Oracle에서의 페이징 처리 : 쿼리 비교와 예시 (0) | 2024.04.25 |
---|---|
[SQL] HAVING 과 WHERE 차이 (0) | 2023.06.16 |
[SQL] COALESCE() 함수 NULL 변환 (0) | 2023.04.01 |
[SQL] Oracle SQL - DESC (0) | 2020.11.27 |
[Oracle] SQL Developer - Date Format 변경 (0) | 2020.11.09 |
댓글