다음을 통해 공유


NULL 비교 검색 조건

NULL 값은 열에 대한 데이터 값을 알 수 없거나 사용할 수 없음을 의미합니다. NULL은 0(숫자 값 또는 이진 값), 길이가 0인 문자열 또는 공백(문자 값)과 다릅니다. Null 값을 사용하면 0(숫자 열) 또는 공백(문자 열)의 항목과 비항목(숫자 열 및 문자 열 모두에 대한 NULL)을 구분할 수 있습니다.

다음 두 가지 방법으로 CREATE TABLE 문에서 지정된 대로 Null 값이 허용된 열에 NULL을 입력할 수 있습니다.

  • 입력된 데이터가 없고 열이나 데이터 형식에 기본값 또는 DEFAULT 제약 조건이 없는 경우 SQL Server는 자동으로 NULL 값을 입력합니다.

  • 사용자는 따옴표 없이 NULL을 입력해서 NULL 값을 명시적으로 입력할 수 있습니다. 따옴표를 사용하여 문자 열에 단어 NULL을 입력하는 경우 Null 값이 아니라 문자 N, U, L 및 L로 처리됩니다.

Null 값을 검색하면 응용 프로그램은 일반적으로 해당 위치에서 NULL, (NULL) 또는 (null)과 같은 문자열을 표시합니다. 예를 들어 Product 테이블의 Color 열은 Null 값을 허용합니다.

USE AdventureWorks2008R2;
GO
SELECT ProductID, Name, Color
FROM AdventureWorks2008R2.Production.Product
WHERE Color IS NULL

Null 값 비교

Null 값을 비교할 때 주의해야 합니다. 비교 동작은 SET ANSI_NULLS 옵션의 설정에 따라 다릅니다.

SET ANSI_NULLS가 ON이면 식 중 두 개 이상이 NULL인 비교 결과는 TRUE 또는 FALSE가 아니라 UNKNOWN이 됩니다. 알 수 없는 값이 다른 값과 논리적으로 비교될 수 없기 때문입니다. 이 오류는 두 개의 식 중 하나를 리터럴 NULL과 비교하거나 두 개의 식을 비교하여 그 중 하나가 NULL로 계산되는 경우에 발생합니다. 예를 들어 ANSI_NULLS가 ON이면 다음 비교 결과는 항상 UNKNOWN이 됩니다.

ytd_sales > NULL

변수에 NULL 값이 포함된 경우 다음 비교 결과도 UNKNOWN이 됩니다.

ytd_sales > @MyVariable

IS NULL 또는 IS NOT NULL 절을 사용하여 NULL 값을 테스트하십시오. 그렇게 하면 WHERE 절이 복잡해질 수 있습니다. 예를 들어 AdventureWorks2008R2Customer 테이블의 TerritoryID 열은 Null 값을 허용합니다. SELECT 문이 다른 값 이외에 Null 값을 테스트하는 경우 IS NULL 절이 포함되어야 합니다.

SELECT CustomerID, AccountNumber, TerritoryID
FROM AdventureWorks2008R2.Sales.Customer
WHERE TerritoryID IN (1, 2, 3)
   OR TerritoryID IS NULL

Transact-SQL은 비교 연산자가 Null 값을 비교할 때 TRUE 또는 FALSE를 반환할 수 있도록 하는 확장 기능을 지원합니다. 이 옵션은 ANSI_NULLS를 OFF로 설정하면 활성화됩니다. ANSI_NULLS가 OFF이면 ColumnA = NULL과 같은 비교는 ColumnA에 Null 값이 있을 때 TRUE를 반환하고 ColumnA에 NULL 이외의 일부 값이 있을 때 FALSE를 반환합니다. NULL로 평가되는 두 식의 비교도 TRUE를 반환합니다. ANSI_NULLS 설정은 NULL이 포함된 조인된 열에 영향을 주지 않습니다. NULL이 포함된 조인된 열의 행은 결과 집합에 속하지 않습니다. ANSI_NULLS를 OFF로 설정하면 다음 SELECT 문은 Region이 Null 값인 Customer 테이블의 모든 행을 반환합니다.

SELECT CustomerID, AccountNumber, TerritoryID
FROM AdventureWorks2008R2.Sales.Customer
WHERE TerritoryID = NULL

Null 값은 ANSI_NULLS 설정에 상관없이 ORDER BY, GROUP BY 및 DISTINCT 키워드의 용도에 대해 항상 동일하게 간주됩니다. 또한 NULL을 허용하는 고유 인덱스 또는 UNIQUE 제약 조건에는 NULL 키 값을 갖는 한 행만 포함될 수 있습니다. NULL을 갖는 다음 행은 거부됩니다. 기본 키의 일부인 열에서 기본 키가 NULL을 가질 수 없습니다.

요인을 알 수 없는 경우 그 결과는 UNKNOWN이어야 하므로 NULL과 관련된 계산 결과는 NULL이 됩니다. 예를 들어 column1이 NULL인 경우 column1 + 1은 NULL로 계산됩니다.

검색할 열에 Null 값을 허용하기로 정의된 열이 포함되면 데이터베이스에서 Null 또는 Null이 아닌 값을 다음 패턴으로 찾을 수 있습니다.

WHERE column_name IS [NOT] NULL

참고 항목

참조

개념