DB/SQL

[SQL] NULL값과 ‘’(공백) 비교

콩다영 2023. 3. 22.
728x90

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과 ‘’인값은 안 나오니 주의.

하지만 MSSQLNULL과 ‘’을 구분해서 사용합니다.

 


 

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 값으로 인해 발생할 수 있는 오류를 방지할 수 있습니다.

 


 
 

728x90
반응형

댓글