建立兩張示範表 student、course(一對一關係),以及三表 student/course/student_course(多對多關係)。圖片展示樣本資料:


SELECT * FROM student LEFT JOIN course ON student.ID = course.ID;

student) 所有列;右表無對應時以 NULL 填充。SELECT * FROM student RIGHT JOIN course ON student.ID = course.ID;

course) 所有列;左表無對應時以 NULL 填充。SELECT * FROM student FULL JOIN course ON student.ID = course.ID;

NULL 填充。LEFT JOIN UNION RIGHT JOIN。SELECT * FROM student INNER JOIN course ON student.ID = course.ID;

SELECT * FROM student, course WHERE student.ID = course.ID。SELECT * FROM student CROSS JOIN course;

WHERE student.ID = course.ID,結果等同 INNER JOIN。調整結構:student(Sno, Name, Cno)、course(Cno, CName)。聯結語法不變,結果呈現一生多課。



SELECT s.Name, c.Cname
FROM student_course sc
LEFT JOIN student s ON s.Sno = sc.Sno
LEFT JOIN course c ON c.Cno = sc.Cno;

student_course 至少包含兩張主表的主鍵(Sno, Cno),可擴充屬性如 Score、Semester。LEFT JOIN 確保即使學生未選課/課程無學生也能列出(若需僅列有配對改用 INNER JOIN)。| 場景 | 建議聯結類型 | 索引策略 |
|---|---|---|
| 主表查明細(一對多) | LEFT JOIN | 明細表外鍵欄位建非叢集索引 |
| 多對多關聯查詢 | INNER JOIN(中間表) | 中間表雙欄位建複合叢集索引 (FK1, FK2) |
| 需保留無配對主記錄 | LEFT/RIGHT JOIN | 被保留側主鍵已為叢集索引 |
| 報表矩陣/全排列 | CROSS JOIN | 小資料集(<1 萬列)可接受 |
掌握各類聯結語意與適用場景,配合正確索引設計,即能撰寫高效、正確的多表查詢 SQL。