在上面的关系模式中,我将如何执行以下操作?:
列出所有GPA高于申请的专业所要求的最低GPA的学生的姓名。
答案 0 :(得分:2)
几个联接应该可以解决问题:
SELECT s.*
FROM Student s
JOIN Apply a ON s.sId = a.sId
JOIN MinimumGPA m on m.major = a.major
WHERE s.gpa > m.mingpa
答案 1 :(得分:0)
select s.Cname,s.gpa as studentGpa ,mg.mingpa as mingpaRequired from student s
inner join apply a on s.sid=a.sid
inner join major m on m.major=a.major
inner join minimumGPA mg on mg.major=m.major
where mg.mingpa<s.gpa
答案 2 :(得分:0)
您使用JOIN和NATURAL JOIN(这不是必需的,但我喜欢), 通过联接您ufse 2表给出需要相等的2列(您在WHERE中指定它们),NATURAL JOIN的功能相同,但假设您有1个或多个具有相同名称的列(这些是自然联接使用的,例如if他们被放到哪里了
因此,首先将MinimumGPA和Apply融合在一起(它们有2个相同名称的列,因此很自然地加入)
Build Phases
然后,由于您到处询问学生的姓名,您将新表(给它起了名字,在这种情况下,我使用MinimumGPAApply,如果需要,可以将其命名为“ dogtable”),因为列上的名称与您使用JOIN相同,并在where中指定列,还添加了gpa条件
Select * FROM MinimumGPA NATURAL JOIN Apply
所以最后,您会得到这样的东西:
Select sName from Student JOIN (The first query) As MinimumGPAApply WHERE Student.sId = MinimumGPAApply.sID AND Student.GPA > MinimumGPAApply.minGPA