💻 IT/DB(Tibero & Oracle & MySQL)

[DataBase] NULL이란? NULL 값 조회, 에러 없이 다루기

Nyan cat 2022. 10. 7. 14:51

📌 NULL이란?

데이터베이스에서 NULL값은 특정 컬럼에서 값이 존재하지 않는 상태를 의미한다.

숫자 0 과는 전혀 다른 개념이다. 숫자 0이 들어가 있다면 값이 있는 상태이다.

빈 문자열과도 다르다. 빈 문자열이 있다면 빈 문자열이 값으로 있는 상태이다.

특정 컬럼 설정 시 NN (Not Null) 속성을 주면 해당 컬럼은 null값이 불가 하다는 의미이다. primary key로 설정될 경우 자동으로 NN도 설정된다

 

 

📌 NULL을 다루는 방법

-- NULL 조회하기 
SELECT * FROM member WHERE address IS NULL;

-- NULL이 아닌 데이터만 조회하기 
SELECT * FROM member WHERE address IS NOT NULL;

-- 하나라도 NULL인 데이터 조회하기 
SELECT * FROM member WHERE address IS NULL OR height IS NULL;

-- 누가 봐도 이해할 수 있도록 NULL의 이름을 바꾸기 (COALESCE 함수)
SELECT COALESCE(height, '####'), COALESCE(weight, '___') from member;

 

📌 NULL에 대해 알아두기

  1. IS NULL= NULL 은 다르다.
    • NULL은 어떤 값이 아니기 때문에 애초에 등호를 사용할 수 있는 대상이 아니다. 그래서 =NULL은 True일 수 없다
  2. NULL에는 어떤 연산을 해도 결국 NULL이다
  3. 유효하지 않은 이상한 값 제외하기 ⭐️(age값에 음수, 지나치게 큰 수 등 이상한 값)
-- 유효한 값만 구하기
SELECT AVG(age) FROM member WHERE age BETWEEN 5 AND 100;

SELECT * FROM member WHERE address NOT LIKE '%호';

 

📌 NULL 변환하기

1. COALESCE 함수 : 괄호 속 인자 중에서 가장 첫 번째로 NULL이 아닌 값을 반환한다

SELECT COALESCE(height, 'N/A') FROM member;
SELECT COALESCE(height, weight * 2.3, 'N/A') FROM member;

2. IFNULL 함수 / NVL 함수: 첫 번째 인자가 NULL인 경우에는 두 번째 인자를 표시하고 NULL이 아니면 해당 값을 그대로 표현한다

MySQL에서 IFNULL, Oracle에서 NVL을 사용한다

-- MySQL
SELECT IFNULL(height, 'N/A') FROM member;

-- Oracle
SELECT NVL(height, 'N/A') FROM member;

3. IF 함수 : 첫번째 인자로 조건식이 오고 그 조건식의 결과가 True이면 두 번째 인자 리턴, False라면 세 번째 인자 리턴

SELECT IF(height IS NOT NULL, height, 'N/A') FROM member;

4. CASE 함수

SELECT
  CASE
    WHEN height IS NOT NULL THEN height ELSE 'N/A'
  END
FROM member;
반응형