코딩크리처 2024. 4. 13. 22:52

The NULL value - null 값


한번 노벨상에 대한 데이터를 저장하는 테이블을 만든다고 상상 해 보겠습니다.

우리는 이러한 컬럼 (열) 을 정의 할 것 입니다.

year field winner's name winner's birth year

하지만, 몇몇 승자들은 생년월일이 정의되지 않았습니다.

예를 들어, 2012 년에 노벨 평화상을 받은 유럽 연합의 사람들을 말할 수 있습니다.

여러 사람이 받았기 때문에 정의되지 않는다고 말하는 것 같기도 하다.

여기에 0 과 같은 특별한 값을 이 Cell에 넣고 싶지만, 실수로 이끌 가능성이 있습니다.

이러한 예시를 위해서, SQL은 특별한 값을 가지고 있습니다. :: NULL

이 주제에서 NULL을 어떻게 사용하는지 배울 겁니다.


NULL value - NULL 값


NULLSQL 에서 주로 알려지지 않았거나, 정의되지 않은 데이터 값을 가르킵니다.

이 값은 0 그리고 " 값과 혼동되지 않습니다.

" 는 빈 문자열을 의미하는데, 빈 값을 의미하기 위해 NULL 값을 사용하라는 의미가 담겨있다.

수학적, 혹은 문자열 표현식과 피연산자 사이의 NULL 은 이 표현식을 NULL 로 평가합니다.

예를 들어, 2 + 2 * NULL == NULL 입니다.


NULL 값은 컬럼의 어떠한 타입에라도 저장 될 수 있습니다.

하지만, 소프트웨어 엔지니어가 CREATE TABLE 구문에 NOT NULL 제한을 걸 수도 있는데,

이는 컬럼이 NULL을 저장하지 못한다고 표기하는 것입니다.

예를 들어, 밑의 코드에 따르면 winner_birth_year 컬럼만이 NULL 을 담을 수 있습니다.

CREATE TABLE winners(
    year INTEGER NOT NULL,
    field VARCHAR(20) NOT NULL,
    winner_name VARCHAR(100) NOT NULL,
    winner_birth_year INTEGER
);

Comparisons with NULL - NULL 과 비교해보기


NULL 값은 기본적으로 값이 표현되지 않는다 라는 의미입니다.

이 점 때문에, NULL 과의 비교는 TRUEFALSE 가 될 수 없습니다.

하지만, 항상 세 번째 논리적 결과가 있는데, 이는 UNKNOWN 입니다.

이는 사실 불린 타입의 NULL 값 이기도 하며, 몇몇 데이터 관리 시스템이 특별한 UNKNOWN 값을 구별하지 않습니다.

예를 들어, 밑의 각각의 비교식의 결과는 UNKNOWN 입니다.

  • NULL = 1
  • NULL <> 1
  • NULL > 1
  • NULL = '1'
  • NULL = NULL

어떠한 것도 NULL 과 같을 수는 없습니다. 심지어 NULL 과 NULL 은 같지 않습니다.

우리는 어떻게 표현식, 혹은 값이 null 인지 아닌지 확인 할 수 있을까요?

SQL은 특수 조건자를 지원합니다. : IS NULL 그리고 IS NOT NULL

예를 들어, 밑에 있는 두 개의 쿼리들은 TRUE 결과를 반환합니다.

SELECT 0+NULL IS NULL; # 0 + NULL 은 NULL 이다.
SELECT '' IS NOT NULL; # '' 문자열 리터럴은 NULL 이 아니다.

밑의 쿼리는 FALSE로 평가됩니다.

SELECT NULL IS NOT NULL;
SELECT 1-1 IS NULL;

TRUE, FALSE, and UNKNOWN - 참, 거짓, 언노운


UNKNOWN 피연산자가 있는 논리 연산자에서는,

피연산자가 UNKNOWN 인지에 따라 결과가 UNKNOWN 입니다.

피연산자가 UNKNOWN 이라면, 결과값이 UNKNOWN 이 나올 수 있는 상황이 만들어진다.

따라서, 비교식과 대조적으로, 논리 표현식의 결과는 UNKNOWN 이 아닌 다른 것이 될 수 있습니다.

심지어 하나의 피연산자가 UNKNOWN 인 상황에서도.

밑의 예제를 한 번 고려 해 봅시다.

  • (NULL = 1) AND TRUE의 결과는 UNKNOWN 입니다.

만약 양 쪽의 피연산자가 TRUE 라면, 결과는 TRUE 입니다.

  • (NULL = 1) OR TRUE의 결과는 TRUE 입니다.

적어도 하나의 피연산자가 TRUE라면, 결과는 TRUE 이다.


Conclustion - 결론


이제 당신은 실제로 값이 없을 때, 데이터를 어떻게 작업 할 것인지 알게 되었고,

필요한 곳에 NULL 값을 사용하는 것을 알게 되었습니다.

SQL 에서의 NULL 값의 키 포인트를 다시 말해 봅시다.

  • NULLSQL 에서 몇몇 데이터 값을 가르키기 위해 사용되는데, unknown 혹은 undefined 입니다.
  • 컬럼 (속성, 열) 에 NULL 값을 담지 않기 위해 NOT NULL 제약을 표기합니다.
  • 표현식이나 값이 null 인지 아닌지 체크하기 위해 IS NULL 그리고 IS NOT NULL 을 사용합니다.