728x90
매일 SQLD 기출 문제 풀기 챌린지
문제 40.
아래의 테이블들에 대해서 SQL문을 수행하였을 때의 결과 값은?
[ TEST40_1 ]
COL |
1 |
2 |
3 |
4 |
[ TEST40_2 ]
COL |
2 |
NULL |
[ SQL ]
SELECT COUNT(*)
FROM TEST40_1 A
WHERE A.COL NOT IN (SELECT COL FROM TEST40_2);
① 0
② 1
③ 3
④ 6
해설해보기
제시된 쿼리는 TEST40_1 테이블에서, TEST40_2 테이블의 COL 컬럼에 없는 COL 값을 가진 행의 수를 세는 쿼리입니다.
■ NOT IN
주어진 리스트에 없는 값을 찾습니다.
주의깊게 봐야할 것은
TEST40_2 테이블의 COL 컬럼에 NULL 값이 존재한다는 점 입니다.
NULL은 비교연산을 수행할 때 "알 수 없는 값"으로 처리 됩니다.
따라서 제시된 쿼리는 어떠한 값도 COUNT 할 수 없게 됩니다.
왜냐하면 TEST40_2 테이블에 NULL 값이 포함되어 있어
NOT IN 조건을 만족하는지 확실하게 판단할 수 없기 때문입니다.
일반적으로 COUNT() 함수를 Asterisk(*) 와 함께 사용하면,
모든 행을 카운트하기 때문에 NULL도 세게 됩니다.
그러나 이런 경우에는 아예 COUNT 할 수 없습니다.
단, COUNT 함수의 특징으로 이런 경우에도 에러를 반환하지 않고 무조건 결과를 출력합니다.
그래서 0을 반환하는 것 입니다.
직접 실행해보기
SELECT COUNT(*)
FROM TEST40_1 A
WHERE A.COL NOT IN (SELECT COL FROM TEST40_2);
관련 스크립트
# TEST40_1 테이블
CREATE TABLE TEST40_1 (
COL NUMBER
);
INSERT INTO TEST40_1 (COL) VALUES (1);
INSERT INTO TEST40_1 (COL) VALUES (2);
INSERT INTO TEST40_1 (COL) VALUES (3);
INSERT INTO TEST40_1 (COL) VALUES (4);
# TEST40_1 테이블
CREATE TABLE TEST40_2 (
COL NUMBER
);
INSERT INTO TEST40_2 (COL) VALUES (2);
INSERT INTO TEST40_2 (COL) VALUES (NULL);
반응형
'SQL 문제 풀기 > 2. SQLD 기출 : 2024.3.01~2024.4.25' 카테고리의 다른 글
<SQLD 42> like 연산자에 대한 기출문제 (0) | 2024.04.11 |
---|---|
<SQLD 41> NULL 값 비교에 대한 기출문제 (0) | 2024.04.10 |
<SQLD 39> 데이터 분석 함수에 대한 기출문제 (0) | 2024.04.08 |
<SQLD 38> 조인에 대한 기출문제 (0) | 2024.04.07 |
<SQLD 37> 기타 비교연산자 대한 기출문제 (0) | 2024.04.06 |