문제
업체 테이블에 p, q, r 데이터가 있고 물품은 각 30, 40, 50개가 있다. 쿼리문 수행 결과로 옳은 것은?
SQLSELECT COUNT(DISTINCT 물품) FROM 업체; SELECT COUNT(*) FROM 업체 WHERE 물품 IN ('p', NULL);
① 3, 0 ② 3, 30 ③ 3, 오류가 발생한다. ④ 3, NULL
정답
2번
해설
정답: 2. DISTINCT 물품은 p, q, r의 3개이고, 물품 IN ('p', NULL)은 물품이 p인 행만 TRUE가 되어 30건이 조회된다.
오답 풀이
- 1번: IN 목록에 NULL이 있어도 p와 일치하는 행은 조회된다.
- 2번: 서로 다른 물품 수 3개, p인 행 30건으로 옳다.
- 3번: IN 목록에 NULL이 포함되어도 문법 오류는 아니다.
- 4번: COUNT(*)는 조건을 만족하는 행 수를 반환하며 NULL을 반환하지 않는다.
보충 개념 IN ('p', NULL)은 값이 'p'이면 TRUE이고, 다른 값은 NULL 비교 때문에 UNKNOWN이 될 수 있다. WHERE 절에서는 TRUE인 행만 반환된다.