SQL語言_多表查詢和TOP限制結果集_PAGE3

郭珮媛發表於2024-11-23

多表查詢

--01.內連線
SElECT * FROM Student
	INNER JOIN SC ON Student.Sid=SC.Sid--Student與SC連線起來

SElECT Sname,Cid,Grade FROM Student S--為表取別名,AS可以省略
	JOIN SC ON S.Sid=SC.Sid--INNER可以省略

SELECT Sname,Cname,Grade
	FROM Student S 
	JOIN SC ON S.Sid=SC.Sid
	JOIN Course C JOIN C.Cid=SC.Cid--涉及三張表,多一個表就多一個JOIN
	WHERE Sdept='計算機系'
		AND Cname='計算機作業系統'
		
SELECT Sname,Sdept
	FROM Student S 
	JOIN SC ON S.Sid=SC.Sid
	JOIN Course C JOIN C.Cid=SC.Cid--要查詢的列與元組與SC無關,但是S與C要靠SC連線
	WHERE Cname='JAVA'

SELECT Cid,COUNT(*) AS Total,AVG(Grade) AS AvgGrade,
	MAX(Grade) AS MaxGrade,MIN(Grade) AS MinGrade
	FROM Student S 
	JOIN SC ON SC.Sid=S.Sid
	WHERE Sdept='計算機系'
	GROUP BY Cid
	
--02.自連線
SELECT S2.Sname,S2.Sdept FROM Student S1 
	JOIN Student S2 ON S1.Sdept=S2.Sdept--要讓物理上為同一張表在邏輯上成為兩個表
	WHERE S1.Sname='張三' 
		AND S2.Sname!='張三'--查詢與張三在同一個系的學生
		
--03.外連線

--查詢學生的選課情況,包括選了課程的學生和沒選課程的學生
--不滿足表連線條件的也要顯示出來,並在相應列上放置NULL
--03.01左外連線
SELECT Student.Sid,Sname,Cid,Grade
	FROM Student LEFT OUTER JOIN SC--限制表2(這裡指SC)中的資料必須滿足連線條件,表1無所謂
	ON Student.Sid=Sc.Sid

--03.02右外連線	
SELECT Student.Sid,Sname,Cid,Grade
	FROM SC RIGHT OUTER JOIN Student--限制表1(這裡指SC)中的資料必須滿足連線條件,表2無所謂
	ON Student.Sid=Sc.Sid
	
--查詢哪些課程沒有人選,列出其課程名
SELECT Cname FROM Course C LEFT JOIN SC
	ON C.Cid=SC.Cid
	WHERE SC.Cid IS NULL

TOP限制結果集

TOP n [percent] [WITH TIES]
--WITH TIES表示包括並列結果

--查詢年齡最大的三名學生
SELECT TOP 3 Sname,Sid,Sdept
	FROM Student
	ORDER BY Sage DESC
	
--查詢Java成績前三包括並列的學生
SELECT TOP 3 WITH TIES Sname,Sid,Grade
	FROM Student S JOIN SC ON S.Sid=SC.Sid
	JOIN Course C ON C.Sid=SC.Sid
	WHERE Cname="Java"
	ORDER BY Grade DESC

相關文章