이미지09
Coding Story/DATABASE

[ Database ] SQLD Null 과 Default

반응형

 

 

SQLD 자격증을 공부하다 생각도 못 한 부분에서 해메여서 다시 되짚어 보고자 한다.

공부하다 헷갈렸던 부분은 다름 아닌 Null 에 대해서였다.

Null 의 뜻을 아무것도 없는 상태 또는 아무것도 없는 값으로 알고 있었다.

그러다 이게 틀린 정보라는걸 이제서야 알았다.

이번을 계기로 제대로 Null 을 박살내보자.

 

 

 

먼저 Null 과 0 과 ' '(공백) 은 어떤 차이가 있을까?

우선 가장 본질적으로 차이점을 본다면 0 과 ' '(공백) 은 엄연히 유효한 데이터이다.

이유는 0 은 숫자 데이터이며 ' '(공백) 은 문자 데이터이기 때문이다.

그럼 Null 은? 앞에서 말했듯 Null 은 아무것도 없는 상태인줄 알았으나

 

그게 아니라 정의되지 않아 알 수 없는 데이터를 뜻하는 것이었다.

이게 무슨 소리냐? 같은 말 아니냐? 할 수 있는데 아무것도 없는 값과 정의되지 않아 알 수 없는 데이터는 엄연히 다르다.

아무것도 없는 상태아무런 값이 들어오지 않은 상태를 뜻하며,

정의되지 않은 데이터는 말 그대로 정의되지 않은 알 수 없는 값이 들어온 상태​란 뜻이다.

아직도 제대로 차이점이 눈에 안보인다면 예제 문제를 하나 들어 살펴보자.

 

 

 

먼저 아래와 같이 'TEST_TABLE'이라는 테이블이 있고

이 테이블은 VARCHAR2(30) 자료형을 가진 컬럼 COL1 과

NUMBER 자료형을 가졌으며 DEFAULT가 '20' 으로 설정되있는 컬럼 COL2 가 있다고 가정하자.

[ TEST_TABLE ]

컬럼1 : COL1 VARCHAR2(30)

컬럼2 : COL2 NUMBER DEFAULT 20

 

 

이러한 TABLE을 가지고 아래의 SQL 쿼리를 수행한다면?

// 1.COL1 컬럼에 'A'를, COL2 컬럼에 NULL을 집어넣는다.
INSERT INTO TEST_TABLE ( COL1, COL2 ) VALUES ( 'A', NULL) ;

// 2.COL1 컬럼에 'B'를, COL2 컬럼에 NULL을 집어넣는다.
INSERT INTO TEST_TABLE ( COL1, COL2 ) VALUES ( 'B', NULL );

// 3.COL1 컬럼에 'C'를 집어넣고, COL2 컬럼에는 아무 값도 집어넣지 않는다.
INSERT INTO TEST_TABLE ( COL1 ) VALUES ( 'C' ) ;

// 4.위에서 생성한 ROW 3개의 COL2 데이터 합을 조회한다.
SELECT SUM ( COL2 ) FROM TEST_TABLE ;

 

그럼 4번 쿼리를 수행한 결과는 어떻게 나올까?

 

 

기존에 필자는 컬럼의 DEFAULT 기능은 아무런 값이 들어오지 않을경우 초기값을 설정한다는 것을 알고 있었으므로

1번 쿼리, 2번 쿼리, 3번 쿼리를 수행 할 때 전부 DEFAULT에 맞춰 '20'씩 세 번 다 들어가는줄 알고 있었다.

이유는 NULL 을 집어 넣는다는건 아무런 값도 안 집어 넣는다고 알고 있었기 때문이다.

아래처럼 말이다.

포스팅 이미지 01

 

여기서 COL2 컬럼의 값을 SUM 하면 당연히 '20 + 20 + 20' 이니까 '60'이 나온다 생각했었다.

하지만 SUM의 결과는 '20'.

이러한 결과가 나온 이유를 알아보도록 하자.

 

 

앞서 말했듯 DEFAULT 란 아무런 값도 들어오지 않을 경우를 위해 사용한다.

하지만 1번 쿼리와 2번 쿼리에서 NULL 을 집어 넣는데 이는 COL2 컬럼의 입장에선 DEFAULT 제약조건에 걸리지 않는 것.

이게 무슨말인가 하니 COL2 컬럼의 입장에선 아무런 값도 들어오지 않은게 아니라 정의되지 않은 알 수 없는 값이 들어온 셈이다.

그렇기에 DEFAULT 의 제약에 걸리지 않고 NULL 이 들어가게 되고,

3번 쿼리를 수행할 때 COL2 컬럼에 아무런 값이 들어가지 않았으니 DEFAULT 값인 '20'이 들어가게 되는 것이다.

즉 1번 쿼리, 2번 쿼리, 3번 쿼리를 수행하면 아래와 같은 데이터가 생성된다.

포스팅 이미지 02

 

이러니 COL2 컬럼의 SUM 을 구하면 'NULL + NULL + 20' 이니 당연히 '20'이 나올 수 밖에.

 

 

 

이렇게 NULL 에 대한 자문자답을 마치며

NULL 은 아무것도 없는 값이 아니라 정의되지 않아 알 수 없는 값임을 명심하자.

 

 

 

 

반응형