sql-根据其他表中的数据从表中选择项?

wfveoks0  于 2021-06-19  发布在  Mysql
关注(0)|答案(3)|浏览(307)


在上述关系模式中,我将如何执行以下操作:
列出所有gpa高于所申请专业最低要求gpa的学生名单。

gopyfrb3

gopyfrb31#

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
kg7wmglp

kg7wmglp2#

两个连接应该可以做到:

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
myss37ts

myss37ts3#

您使用join和natural join(这一个不是必需的,但我喜欢它),join you ufse 2 tables给出了两个需要相等的列(您在where中指定了它们),natural join做同样的事情,但是假设您有一个或多个同名的列(这些是natural join使用的列,就像它们在where中被delared一样)
所以首先你融合minimumgpa并应用(他们有两个同名的col以便自然连接)

Select * FROM MinimumGPA NATURAL JOIN Apply

然后,既然你在这里要求学生的名字,你就把这个新表(给它一个名字,在这个例子中我用了minimumgpaapply,如果你想的话,你可以把它命名为“dogtable”)和学生融合在一起,因为列上的名字和你用join和where指定的列不一样,你还添加了gpa条件

Select sName from Student JOIN (The first query) As MinimumGPAApply WHERE Student.sId = MinimumGPAApply.sID AND Student.GPA > MinimumGPAApply.minGPA

所以最后你用这样的方式结束:

Select sName from Student JOIN (Select * FROM MinimumGPA NATURAL JOIN Apply) As MinimumGPAApply WHERE Student.sId = MinimumGPAApply.sID AND Student.GPA > MinimumGPAApply.minGPA

相关问题