본문 바로가기

데이터베이스/SQLD

[SQLD] NULL 속성

728x90

Null이란?

데이터베이스에서 Null은 값이 존재하지 않거나 아직 입력되지 않은 상태를 의미하는 특별한 표현입니다. Null은 "값이 없음"을 의미하며, 이는 0이나 공백(" ")과는 전혀 다른 의미를 가집니다.

  • 0: 숫자 데이터로서, 값이 "0"임을 의미합니다.
  • 공백 (" "): 문자 데이터로서, 값이 "빈 문자열"임을 의미합니다.
  • Null: 데이터가 존재하지 않음을 의미하며, 이는 숫자나 문자와 같은 데이터 값이 아닌, 값 자체가 정의되지 않았음을 나타냅니다.

Null의 특성

  1. 타입이 없습니다: Null 자체는 어떤 데이터 타입도 가지지 않습니다. Null은 그 자체로 "미정의" 상태를 나타내며, 어떤 특정한 데이터 타입으로 간주되지 않습니다. 하지만 Null이 할당된 필드는 특정 데이터 타입을 가질 수 있습니다. 예를 들어, 숫자 필드에 Null이 있을 수 있고, 문자 필드에도 Null이 있을 수 있습니다. 이 경우, Null은 해당 데이터 타입의 필드에 "값이 없음"을 의미하게 됩니다.
  2. 비교가 불가능합니다: Null과 Null을 비교하는 것은 불가능합니다. SQL에서 NULL = NULL은 항상 False가 아닌 **Unknown(미정의)**으로 평가됩니다. 이 때문에, Null 값들은 서로 비교할 수 없으며, 논리적으로 평가할 수도 없습니다. Null 값과의 연산은 모두 Null로 결과가 나타납니다.

Null과 연산

  • 단일행 연산: Null과의 연산 결과는 항상 Null이 됩니다. 이는 Null이 "미정의된 상태"를 나타내기 때문입니다.
    100 + NULL => NULL
    100 + 0 => 100
    위의 예시에서 첫 번째 연산 결과는 Null이 됩니다.

  • 다중행 연산: 다중행 연산에서 Null 값은 집계 함수(Aggregate Functions)에서 무시됩니다. 예를 들어, 평균을 계산할 때 Null 값은 제외되고 계산됩니다.
    1, 2, 3, NULL 의 평균 => (1 + 2 + 3) / 3
    1, 2, 3, 0의 평균 => (1 + 2 + 3 + 0) / 4


IS NULL, IS NOT NULL

  • IS NULL: 값이 Null인 행을 찾습니다. 이 조건을 사용하면 특정 필드가 Null인 레코드를 조회할 수 있습니다.
  • IS NOT NULL: 값이 Null이 아닌 행을 찾습니다. 이 조건을 사용하면 특정 필드에 값이 정의된 레코드를 조회할 수 있습니다.

Null과 3가지 논리 값

SQL에서 Null은 TrueFalse와 별도로 Unknown이라는 제3의 논리 값을 가집니다. 예를 들어 NULL = NULL의 결과는 True나 False가 아닌 Unknown으로 간주됩니다. 이는 Null이 "정의되지 않은 값"이기 때문에, 두 개의 Null 값을 비교하는 것이 의미가 없다는 뜻입니다.

728x90

'데이터베이스 > SQLD' 카테고리의 다른 글

[SQLD] 집합연산자  (0) 2024.08.20
[SQLD] 서브 쿼리  (0) 2024.08.14
[SQLD] 트랜잭션  (0) 2024.08.02
[SQLD] 정규화  (1) 2024.07.30
[SQLD] Entity와 속성  (0) 2024.07.26