簡體   English   中英

SQL-根據其他表中的數據從表中選擇項目?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM