數據庫學習筆記之數據庫查詢(二)
這次主要總結一下多表連接查詢~~
所謂連接查詢,就是指一個查詢同時涉及兩個或兩個以上的表,連接查詢又包括內連接、外連接和交叉連接等查詢用到的還是這個里面提到的那三個表
內連接
語法:
SELECT ...
FROM 表名 [INNER] JOIN
被連接表
ON <連接條件>
例子:
1、查詢每個學生及其選課的詳細信息
SELECT * FROM Student INNER JOIN SC ON Student.Sno = SC.Sno;
2、查詢計算機系學生的修課情況,要求列出學生的學號、名字、所修課的課程號和成績。
SELECT Student.Sno, Student.Sname,SC.Cno, SC.Cno, SC.Grade
FROM Student JOIN SC
ON Student.Sno = SC.Sno
WHERE Student.Sdept = '計算機系';
3、統計每個系的學生的考試平均成績
SELECT Student.Sdept, AVG(Grade) 平均成績
FROM Student
JOIN SC
ON Student.Sno = SC.Sno
GROUP BY Sdept;
4、統計計算機系每門課程的選課人數、平均成績、最高成績和最低成績。
SELECT Cno, COUNT(*) 選課人數, AVG(Grade) 平均成績, MAX(Grade) 最高成績, MIN(Grade) 最低成績
FROM Student
JOIN SC
ON Student.Sno = SC.Sno
WHERE Student.Sdept = '計算機系'
GROUP BY Cno;
自連接
說明:
自連接為特殊的內連接,相互連接的表物理上為同一張表;必須為兩個表取別名,使之在邏輯上成為兩個表。
例:
1、查詢與劉晨在同一個系學習的學生的姓名和所在的系
SELECT S2.Sname, S2.Sdept
FROM Student S1 JOIN Student S2
ON S1.Sdept = S2.Sdept
WHERE S1.Sname = '劉晨' AND S2.Sname != '劉晨';
2、查詢與“數據結構”學分相同的課程的課程名和學分
SELECT c1.Cname, c1.Ccredit
FROM Course c1 JOIN Course c2
ON c1.Ccredit = c2.Ccredit
WHERE c2.Cname = '數據結構' ;
外連接
說明:
只限制一張表中的數據必須滿足連接條件,而另一張表中數據可以不滿足連接條件
語法:
SELECT ...
FROM 表1
LEFT | RIGHT [OUTER] JOIN 表2
ON <連接條件>
例:
查詢學生的修課情況,包括修了課程的學生和沒有修課的學生
如果用普通的查詢的話:
SELECT Student.Sno, Sname, Cno, Grade
FROM Student, SC
WHERE Student.Sno = SC.Sno;
由于沒有選課的學生在SC表中就沒有記錄,所以這種查詢是查詢不到沒有修課的學生的記錄,查詢結果如圖:
所以需要用到外連接查詢:
左外連接查詢:
SELECT Student.Sno, Sname, Cno, Grade
FROM Student
LEFT OUTER JOIN SC
ON Student.Sno = SC.Sno;
右外連接查詢:
SELECT Student.Sno, Sname, Cno, Grade
FROM SC
RIGHT OUTER JOIN Student
ON Student.Sno = SC.Sno;
*請認真填寫需求信息,我們會在24小時內與您取得聯系。