급똥이 마려워서 화장실 갔다고 해보자..(...?)
칸에 애초에 화장지가 없었던 것과 화장지는 있었지만 다 써서 없는 상태는 엄연히 다르다. 비어버린 휴지 심지를 보고는 타이밍이 안좋네..라고 생각하겠지만, 애초에 휴지가 없는 상황에선 왜 이 화장실엔 휴지가 없어??라고 화를 내는 것처럼. 결국 닦을 휴지가 없는 건 똑같지만, 받아들이는 태도가 다른 것처럼 0과 NULL도 미묘하게 다르다.
0, NULL, "" 간의 차이를 아는 것은 매우 중요하다. 잘못된 값을 선택하여 쿼리를 돌린다면 예상과 다른 결과 값을 얻을 수 있다.
NULL은 missing data다. 반면 ""은 일부러 데이터를 비어 있게 설정을 한 것이다. 즉 비어있는 값 자체가 고유의 값이다. Null은 밸류값이 제공되지 않았거나, 값을 알 수가 없어 설정된 값이지만, ""는 공백 자체가 밸류 값이 되는 것이다. 고객 휴대폰 번호 라는 칼럼이 있다해보자. 해당 칼럼의 null 값은 고객이 번호를 제공하지 않았을 때를 나타내고, 해당 칼럼의 ""은 우리가 고객의 번호를 제공 받았음에도, 그 고객의 번호가 없을 때를 나타낸다.
0과 NULL간의 관계도 앞과 비슷하다. 카드 한도라는 칼럼이 있다 생각해보자. 카드 한도 칼럼의 NULL 값은 우리가 그 카드 정보를 알아낼 수 없어 한도 또한 알 수 없는 상황이지만, 0이라는 것은 정말 한도가 0이라는 것이다.
""와 0은 컬럼의 특성에 따라 사용자 맘대로 사용할 수 있는 듯하다. 내 생각에는 문자열 칼럼에 값이 없다를 표기할 때는 "", 수치형 칼럼에는 0을 쓰는 것처럼. 칼럼 특성 차이가 아닐까..?라는 생각..(주관적 견해입니다)
쉽게 정리해보자면, NULL 값은 지금 값을 알 수 없는 상태거나 값을 설정할 수 없는 상태고(값을 초기화하지 않은 상태), 0이나 ""은 값을 알고 있고 그 값 자체가 0,""(값을 초기화한 상태) 라고 이해하면 쉬울 것 같다.
NULL 값이 아직 초기화 되지 않은 상태라서 데이터가 없다라고 생각할 수 있으나 엄연히 말하면 데이터는 있다. NULL값도 메모리를 할당받기 때문이다. 메모리가 할당되어 있어 데이터가 있다라고 말하는 것이지, 그 안에 0이나 1과 같은 포인터가 가르켜는 실질적인 데이터 값 관점에서 보면 데이터가 없다라고 보는게 맞다. 관점에서 데이터가 있다 없다로 나눠질 수 있다. 어렵다면..그냥 넘어가도 된다. 위의 내용만으로 충분하다..!
"나 지갑에 0원 있어" 라는 말은 결국 돈이 하나도 "없다"는 뜻이다. 이처럼 우리 일상에서의 0은 값이 없는 숫자, 즉 의미가 없는 수치다보니 NULL 값과 혼동하는 것 같다. 그러나 컴퓨터 세상(?) 에서는 아무런 값이 없다는 것 자체가 의미가 있다는 사실을 인지하면 좋을 것 같다.
참고 링크:
https://www.quora.com/What-are-the-differences-between-null-zero-and-blank-in-SQL
'프로그래밍 언어 > SQL' 카테고리의 다른 글
[Hackerrank] Binary Tree Nodes (0) | 2022.02.15 |
---|---|
[Hackerrank] Occupations (0) | 2022.01.25 |
[Hackkerrank] The PADS (0) | 2022.01.25 |
[HACKERRANK] AVERAGE POPULATION (0) | 2022.01.24 |
[MySQL] 한 행 안에 있는 문자열 여러 개를 행으로 분리하기 (0) | 2022.01.14 |