Microsoft SQL Server
NULLs
수색…
소개
SQL Server에서 NULL
은 없거나 알 수없는 데이터를 나타냅니다. 즉, NULL
은 실제로 값이 아닙니다. 그것은 가치에 대한 자리 표시 자로 더 잘 묘사됩니다. 이것은 또한 비교할 수없는 이유입니다 NULL
도 다른 어떤 값, 그리고 NULL
.
비고
SQL Server는 IS NULL
, IS NOT NULL
, ISNULL()
, COALESCE()
등의 null을 처리하는 다른 메서드를 제공합니다.
NULL 비교
NULL
은 비교와 관련하여 특별한 경우입니다.
다음 데이터를 가정하십시오.
id someVal
----
0 NULL
1 1
2 2
검색어 :
SELECT id
FROM table
WHERE someVal = 1
id 1
반환합니다.
SELECT id
FROM table
WHERE someVal <> 1
id 2
반환합니다.
SELECT id
FROM table
WHERE someVal IS NULL
id 0
반환합니다.
SELECT id
FROM table
WHERE someVal IS NOT NULL
ids 1
과 2
반환합니다.
NULL을 =
, <>
비교에서 값으로 "계산"하기를 원하면 계수 가능한 데이터 유형으로 변환해야합니다.
SELECT id
FROM table
WHERE ISNULL(someVal, -1) <> 1
또는
SELECT id
FROM table
WHERE someVal IS NULL OR someVal <> 1
0
과 2
반환합니다.
또는 ANSI Null 설정을 변경할 수 있습니다.
ANSI NULLS
이후 버전의 SQL Server에서는 ANSI_NULLS가 항상 ON으로 설정되며 명시 적으로 옵션을 OFF로 설정 한 응용 프로그램에서는 오류가 발생합니다. 새로운 개발 작업에서는이 기능을 사용하지 말고 현재이 기능을 사용하는 응용 프로그램을 수정하십시오.
ANSI NULLS
를 off로 설정하면 null 값의 =
/ <>
비교가 가능합니다.
주어진 다음 데이터 :
id someVal
----
0 NULL
1 1
2 2
ANSI NULLS를 on으로 설정하면 다음 쿼리가 수행됩니다.
SELECT id
FROM table
WHERE someVal = NULL
결과가 나오지 않습니다. 그러나 ANSI NULLS가 해제 된 동일한 쿼리는 다음과 같습니다.
set ansi_nulls off
SELECT id
FROM table
WHERE someVal = NULL
id 0
반환합니다.
ISNULL ()
IsNull()
함수는 두 개의 매개 변수를 받아들이고 첫 번째 매개 변수가 null
경우 두 번째 매개 변수를 반환합니다.
매개 변수 :
- 식을 확인하십시오. 모든 데이터 형식의 표현입니다.
- 대체 값. 검사식이 null 인 경우 반환되는 값입니다. 대체 값은 점검 표현식의 데이터 유형으로 내재적으로 변환 될 수있는 데이터 유형이어야합니다.
IsNull()
함수는 check 식과 동일한 데이터 형식을 반환합니다.
DECLARE @MyInt int -- All variables are null until they are set with values.
SELECT ISNULL(@MyInt, 3) -- Returns 3.
위의 COALESCE
도 참조하십시오.
null이거나 null이 아닙니다.
null은 값이 아니기 때문에 null과 비교 연산자를 사용할 수 없습니다.
열 또는 변수가 null을 보유하고 있는지 확인하려면 is null
을 사용해야합니다.
DECLARE @Date date = '2016-08-03'
다음 명령.은 널 (NULL) 값과의 모든 비교가 거짓 또는 알 수 없음으로 평가되므로 값 6
을 선택합니다.
SELECT CASE WHEN @Date = NULL THEN 1
WHEN @Date <> NULL THEN 2
WHEN @Date > NULL THEN 3
WHEN @Date < NULL THEN 4
WHEN @Date IS NULL THEN 5
WHEN @Date IS NOT NULL THEN 6
@Date 변수의 내용을 null
하고 다시 시도하면 다음 명령문은 5
를 반환합니다.
SET @Date = NULL -- Note that the '=' here is an assignment operator!
SELECT CASE WHEN @Date = NULL THEN 1
WHEN @Date <> NULL THEN 2
WHEN @Date > NULL THEN 3
WHEN @Date < NULL THEN 4
WHEN @Date IS NULL THEN 5
WHEN @Date IS NOT NULL THEN 6
COALESCE ()
COALESCE ()
인수를 순서대로 평가하고 처음에 평가되지 않은 첫 번째 표현식의 현재 값을 NULL
로 NULL
.
DECLARE @MyInt int -- variable is null until it is set with value.
DECLARE @MyInt2 int -- variable is null until it is set with value.
DECLARE @MyInt3 int -- variable is null until it is set with value.
SET @MyInt3 = 3
SELECT COALESCE (@MyInt, @MyInt2 ,@MyInt3 ,5) -- Returns 3 : value of @MyInt3.
ISNULL ()은 COALESCE ()와 유사하게 작동하지만 ISNULL () 함수는 두 개의 매개 변수 (하나는 검사 할 매개 변수)를 허용하고 첫 번째 매개 변수가 NULL이면 하나만 사용합니다. 아래 ISNULL
도 참조하십시오.
하위 쿼리가없는 NULL
하위 쿼리에서 하위 쿼리를 처리하지 않는 동안 예상 결과를 얻으려면 NULLS를 제거해야합니다.
create table #outertable (i int)
create table #innertable (i int)
insert into #outertable (i) values (1), (2),(3),(4), (5)
insert into #innertable (i) values (2), (3), (null)
select * from #outertable where i in (select i from #innertable)
--2
--3
--So far so good
select * from #outertable where i not in (select i from #innertable)
--Expectation here is to get 1,4,5 but it is not. It will get empty results because of the NULL it executes as {select * from #outertable where i not in (null)}
--To fix this
select * from #outertable where i not in (select i from #innertable where i is not null)
--you will get expected results
--1
--4
--5
하위 쿼리에서 null을 처리하지 않으면 예상 출력에주의해야합니다.