[英]SQL - Selecting items from table based on data in other tables?
在以上關系模式中,我將如何執行以下操作:
列出所有GPA高於所申請專業最低GPA的學生的姓名。
幾個聯接應該可以解決問題:
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
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
您使用JOIN和NATURAL JOIN(這不是必需的,但我喜歡),用ufse 2表聯接需要提供等於2列的兩列(您在WHERE中指定它們),NATURAL JOIN進行相同的操作,但假設您有1個或多個具有相同名稱的列(這些列是自然聯接使用的列,例如它們在where中被刪除)
因此,首先將MinimumGPA和Apply融合在一起(它們有2個相同名稱的cols,所以很自然地加入)
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.