처방 이력이 없는 환자를 [결과]처럼 조회하려고 한다. ㉠에 들어갈 구… | [SQLD] SQL 개발자 기출유형 모의고사 6회 상세 페이지
1[SQLD] SQL 개발자 기출유형 모의고사 6회
처방 이력이 없는 환자를 [결과]처럼 조회하려고 한다. ㉠에 들어갈 구문으로 옳은 것은?[환자]
| 환자번호 | 환자명 |
|---|---|
| 1 | 강민 |
| 2 | 오라 |
| 3 | 하율 |
| 4 | 표지안 |
[처방]
| 처방번호 | 환자번호 | 처방일 |
|---|---|---|
| 1 | 1 | 2026-03-02 |
| 2 | 1 | 2026-03-03 |
| 3 | 3 | 2026-03-03 |
| 4 | (null) | 2026-03-05 |
SELECT P.환자명
FROM 환자 P
WHERE P.환자번호 NOT IN (SELECT 환자번호
FROM 처방
( ㉠ ))
ORDER BY P.환자명;[결과]
| 환자명 |
|---|
| 오라 |
| 표지안 |
1
GROUP BY 환자번호
2
WHERE 환자번호 IS NOT NULL
3
WHERE 처방번호 > 0
4
WHERE 처방일 IS NULL
해설
서브쿼리 결과에 NULL 이 섞이면 NOT IN 은 NULL 과의 비교가 UNKNOWN 이 되어 한 행도 남지 않으므로, IS NOT NULL 로 NULL 을 먼저 걸러야 한다.
NULL 을 뺀 서브쿼리 결과는 1, 1, 3 이고, 여기에 없는 오라와 표지안만 조회된다.
- 처방일이 NULL 인 행은 없어 서브쿼리가 비므로 네 명 모두 조회된다.
- GROUP BY 는 NULL 도 한 그룹으로 남겨 결과가 0행이 된다.
- 처방번호 조건은 환자번호 NULL 행을 그대로 남겨 0행이 된다.
오류나 개정된 내용이 보이면 알려주세요