위와 같은 테이블에서,
1. 모든 과목의 학점이 A인 학생들의 이름, 전공을 검색하라.
2. A학점을 하나도 받지 못한 학생들의 이름,전공을 검색하라.
는 쿼리문을 작성해야 하는데, 도대체 어떻게 해야 하는지 모르겠습니다.
고수님들 좀 도와주세요^^
1번.
select Name, Major from STUDENT
where StudentNumber in ( select StudentNumber from GRADE_REPORT
where StudentNumber not in ( select StudentNumber from GRADE_REPORT
where Grade <> 'A'));
2번.
where Grade = 'A'));
1에서의 '모든 과목'이라는 말을 두 가지로 해석할 수 있는데요,
첫째로, 개설되어 있는 모든 과목이라는 의미와
둘째로, 한 학생이 개인이 들은 모든 과목이라는 의미를 가질 수 있습니다.
따라서, 1번 문제를 다음 두가지로 해석할 수 있습니다.
첫째로, '개설되어 있는 모든 과목을 수강했고, 수강한 모든 과목이 A인 학생들의 이름과 전공을 검색하라'이고,
둘째는, '자신이 수강한 모든 과목이 A인 학생들의 이름과 전공을 검색하로'로 해석할 수 있습니다.
일단, 1번의 첫번째 해석은 아래와 같은 query로 가능하지 않을까 합니다.
select name, majorfrom student Swhere not exists ((select sectionidentifier from section) minus (select sectionidentifier from grade_report where S.studentnumber = grade_report.studentnumber and grade = 'A'))
1번의 두번째 해석은 위 댓글에서 사용한 것 같은데요, 다음과 같이도 되지 않을까 합니다.
2번의도 다음처럼 되지 않을까요?
select name, majorfrom student Swhere not exists ( select * from grade_report G where S.studentnumber = G.studentnumber and G.grade = 'A')