-
[데이터베이스] SQL 에서 NULL 다루기데이터베이스와 SQL 2022. 10. 4. 17:11
NULL 함수
어떤 프로그래밍 언어를 배우던지 NULL 값을 이해하고 다루는 것은 중요하다.
NULL은 0과 다른 상수이다. 쉽게 말해 unknown value 라고 할 수도 있다.
NULL 값과 어떤 수와 어떤 연산을 해도 그 값은 NULL이 된다.
NULL은 일반적인 비교 연산자를 사용할 수 없다. unknown 값을 비교하는 것이 무의미 한 것과 마찬가지로..
또한 NULL 값은 가장 작은 값으로 취급된다. 오름차순 정렬을 할 때 가장 먼저 NULL값이 온다.
NULL과 관련된 함수로 다음과 같은 것들이 있다.
- ISNULL (), IS NOT NULL(): null 인지 아닌 지를 판단
- COALESCE(): NULL 이 아닌 첫 번째 값을 반환 (중첩 CASE 문에 해당)
- NULLIF( ): 동일한 값이면 NULL, 아니면 첫 번째 값 반환
활용 예: Exclusive OR 관계, 여집합 구하기, 0으로 나눌 때 오류 처리
NULL 을 IN(), NOT IN() 에서는 다음과 같은 특징을 주의 해야 한다.
NOT IN 의 경우 and 로 unknown을 결합하게 되면 전체가 unknown이 된다.
SELECT * FROM suppliers WHERE region IN ('CA', 'LA', NULL); --IN 구문을 풀어서 쓰면 다음과 같음 SELECT * FROM suppliers WHERE region = 'CA' OR region = 'LA' OR region = NULL; -- null은 무시됨 -- NOT IN 의 경우? 전체가 UNKNOWN이 됨 SELECT * FROM suppliers WHERE region NOT IN ('CA', 'LA', NULL); SELECT * FROM suppliers WHERE region <> 'CA' AND region <> 'LA' AND region <> NULL; -- OR 가 AND 가 되므로 값이 나오지 않음 SELECT * FROM dbo.[ ] WHERE Region NOT IN (SELECT ... ) -- 서브쿼리에서 null 값 리턴되지 않아야 함
NULLIF 로 여집합 구하기
SELECT COUNT(*), COUNT(CASE WHEN EmployeeID <> 999 THEN 1 END) -- 사원번호 999가 아닌 값들만 count가 됨 FROM orders SELECT COUNT(*), COUNT(NULLIF(Employee, 999)) -- 사원번호가 999번인 경우 null로 리턴 FROM orders
[참고]
SQL Server 컨설턴트가 알려주는, 쿼리 능력 레벨업(고급 T-SQL 쿼리) 강의
SQL 전문가 가이드
반응형'데이터베이스와 SQL' 카테고리의 다른 글
[데이터베이스] SQL 테이블 값 생성자 VALUES() (0) 2022.10.29 [데이터베이스] MSSQL 난수(random data) (0) 2022.10.22 [데이터베이스] SQL의 핵심 기능, CASE문과 TOP (0) 2022.10.20 데이터베이스의 개체 - 인덱스, 스토어드 프로시저, 트리거 (1) 2022.09.16 데이터베이스 모델링, SQLD의 기본 개념 (0) 2022.09.14