다음 SQL의 실행 결과로 옳은 것은?[진료]진료번호진료과금액응급1내과… | [SQLD] SQL 개발자 기출유형 모의고사 6회 상세 페이지
1[SQLD] SQL 개발자 기출유형 모의고사 6회
다음 SQL의 실행 결과로 옳은 것은?[진료]
| 진료번호 | 진료과 | 금액 | 응급 |
|---|---|---|---|
| 1 | 내과 | 8000 | N |
| 2 | 외과 | 6000 | N |
| 3 | 외과 | 3000 | Y |
| 4 | 내과 | 2000 | Y |
| 5 | 소아과 | 5000 | N |
| 6 | 소아과 | 4000 | N |
| 7 | (null) | 9000 | N |
SELECT 진료번호, 진료과
FROM 진료
WHERE NOT 진료과 = '내과' AND 금액 >= 5000
OR 응급 = 'Y'
ORDER BY 진료번호;1
| 진료번호 | 진료과 |
|---|---|
| 2 | 외과 |
| 3 | 외과 |
| 4 | 내과 |
| 5 | 소아과 |
2
| 진료번호 | 진료과 |
|---|---|
| 2 | 외과 |
| 3 | 외과 |
| 4 | 내과 |
| 5 | 소아과 |
| 7 | (null) |
3
| 진료번호 | 진료과 |
|---|---|
| 2 | 외과 |
| 3 | 외과 |
| 4 | 내과 |
| 5 | 소아과 |
| 6 | 소아과 |
4
| 진료번호 | 진료과 |
|---|---|
| 2 | 외과 |
| 3 | 외과 |
| 5 | 소아과 |
해설
우선순위가 NOT > AND > OR 이므로 조건은 ((NOT 진료과 = '내과') AND 금액 >= 5000) OR 응급 = 'Y' 로 묶여 2·5는 앞쪽, 3·4는 응급 조건으로 남는다.
진료과가 NULL 인 7은 NOT 을 거쳐도 UNKNOWN 이라 금액이 커도 빠지고, 금액 4000 인 6도 제외된다.
- NOT 이 AND 전체에 걸린다고 보면 6까지 잘못 포함된다.
- NULL 을 내과가 아닌 값으로 보면 7이 잘못 포함된다.
- OR 를 먼저 묶으면 응급인 내과 4가 빠진다.
오류나 개정된 내용이 보이면 알려주세요