일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- 코딩애플
- recoverability
- Git
- B tree 데이터삽입
- CPU 스케줄링
- 반효경
- 김영한
- 커널 동기화
- 코딩테스트 [ ALL IN ONE ]
- 프로세스 주소 공간
- 인터럽트
- 갤럭시 S24
- 쉬운코드
- 시스템프로그래밍
- 네트워크
- Extendable hashing
- SQL
- 온디바이스AI
- 시그널 핸들러
- 트랜잭션
- 개발남노씨
- vite
- SDK
- 백엔드
- 쉬운 코드
- 운영체제와 정보기술의 원리
- 운영체제
- 데이터베이스
- concurrency control
- BreadcrumbsComputer-Networking_A-Top-Down-Approach
- Today
- Total
티끌모아 태산
SQL로 데이터 조회하기, NULL 본문
이번시간에는 SQL에서 NULL의 의미를 알아보고 비교 연산에서의 결과에 대해서 알아보도록 하겠습니다.
NULL
- unknown: 알려지지 않음.
- unavailable or withheld: 공개하지 않음, 이용할 수 없음.
- not applicable: 해당 사항x, 적용 불가
이렇게 SQL에서 NULL의 의미는 이렇게 다양한것을 알 수 있다. 업데이트 하지 않았거나, 보안상 공개하지 않았다거나 등등.
NULL과의 비교 연산
SELECT id FROM employee WHERE birth_date = NULL;
이런식으로 작성하면 아무결과값을 받을 수 없다. NULL과 비교 연산을 하기 위해서는 'IS' 또는 "IS NOT" 을 사용해야 한다.
SELECT id FROM employee WHERE birth_date IS NULL;
NULL 과 Three-Valued Logic

여기서 NULL값을 갖는 튜플은 False를 반환할 것 같지만 UNKNOWN 을 반환한다. -> ❗️이때 UNKNWON은 'true' 일 수 도있고 'false'일 수도 있다. 이 점을 인지하는 것이 중요하다. 그래서 three-valued logic은 비교/논리 연산의 결과로 TRUE, FALSE, UNKNOWN을 갖는다.


이렇게 비교/논리 연산에서의 UNKNOWN이 포함되면 어떤 결과값이 나오는지 인지하고 있는 것이 중요하다. 왜냐하면 예를들어, WHERE절은 condition(s)의 결과가 TRUE인 튜플들만 선택된다. ⭐️즉, 결과값이 FALSE거나 UNKNOWN이면 튜플을 선택되지 않는다.


이렇게 NULL 값이 들어가면 UNKNOWN을 반환하게 된다. ❗️TRUE를 반환할 것 같지만 UNKNOWN을 반환한다. 지난 시간의 예제에서 '2000년대생이 없는 부서의 ID와 이름을 알고 싶다' 했을 때, 코드는 다음과 같았다.
SELECT D.id, D.name FROM department AS D WHERE D.id NOT IN (
SELECT E.dept_id FROM employee E WHERE birth_date >= '2000-01-01'
);
임직원 테이블에서 생일이 2000년대 이후인 임직원들의 부서 ID를 가져와서 그 부서 ID에 포함되지 않는 부서의 ID와 name을 가져온다는 것이다. 하지만 만약 '2000년대 이후인 임직원들의 부서 ID'에서 NULL값을 포함한다면 FALSE나 UNKNOWN을 반환하기 때문에 이를 사전에 방지해줄 필요가 있다. 그리고 이에 대해서는 여러가지 방법이 있다. IS NOT NULL 을 넣어서 NULL값이 나오지 않게 방지해준다.
SELECT D.id, D.name FROM department AS D WHERE D.id NOT IN (
SELECT E.dept_id FROM employee E WHERE birth_date >= '2000-01-01'
AND E.dept_id IS NOT NULL
);
'CS 지식 > 데이터베이스' 카테고리의 다른 글
SQL 데이터 조회: JOIN (1) | 2023.09.17 |
---|---|
⭐️SQL 데이터 조회: subquery (0) | 2023.09.14 |
SQL 데이터 조회 (0) | 2023.09.10 |