Application/Database
[MSSQL] NULL 값
Kangjieun11
2021. 4. 14. 15:49
728x90
SQL에서 누락된 (Unknown) 값을 표현하기 위해 NULL값을 사용한다.
-SQL 에서는 언어 요소별로 UNKNOWN 을 처리한다.
1) SQL 쿼리 필터절 (WHERE, HAVING) 에서 NULL값이 사용된 경우
쿼리필터절은 술어식의 결과값이 TRUE인 결과만 받아들인다.
FALSE, UNKNOWN인 경우, 둘다 받아들이지 않는다.
예) WHERE custid>71 의 경우, custid가 71보다 큰 경우의 행들만 조회가 된다.
custid의 값이 NULL이거나 70 이하이면 Filter절을 통과하지 못한다.
70인경우 -> FALSE -> 필터절 통과 X
72인경우 -> TRUE-> 통과 O
NULL인경우 -> TRUE -> 통과 X
2) SQL 체크 제약조건에서 NULL값이 사용된 경우
체크 제약조건은 FALSE만 받아들이지 않는다.
TRUE, UNKNOWN 둘다 받아들인다.
예) CHECK(custid >0)
custid값이
1인경우 -> TRUE -> CHECK 제약 만족
0인경우 -> FALSE -> 만족X
NULL인경우 -> TRUE -> 만족O
# N is Unicode
SELECT custid, country, region, city FROM Sales.Customers WHERE region = N'WA'; |
SELECT custid, country, region, city FROM Sales.Customers WHERE region <> N'WA'; |
SELECT custid, country, region, city FROM Sales.Customers WHERE region = NULL; |
Q. region에는 NULL값이 없는것일까?
A. 아니다. 전체 쿼리를 체크해보자.
SELECT * FROM Sales.Customers;
비교연산자는 값이 존재하는 경우에만 사용할 수 있다.
NULL에는 값이 없기 때문에 비교연산자를 사용할 수 없다.
NULL을 체크하기 위해서는 IS NULL과 같은 술어 연산자를 사용하면 된다.
SELECT custid, country, region, city FROM Sales.Customers WHERE region IS NULL; |
IS NOT NULL
SELECT custid, country, region, city FROM Sales.Customers WHERE region IS NOT NULL; |
SELECT custid, country, region, city FROM Sales.Customers WHERE region <> N'WA' OR region IS NULL; |