經典三表關聯查詢:student(學生)、course(課程)、scores(成績)。題目:查詢「計算機導論」課程成績高於學生「高峰」的學生姓名。
student(no PK, name, ...)
course(cno PK, cname, ...)
scores(no FK, cno FK, grades, ...)
SELECT s.name
FROM student s
JOIN scores sc ON s.no = sc.no
JOIN course c ON sc.cno = c.cno
WHERE c.cname = '計算機導論'
AND sc.grades > (
SELECT sc2.grades
FROM student s2
JOIN scores sc2 ON s2.no = sc2.no
JOIN course c2 ON sc2.cno = c2.cno
WHERE s2.name = '高峰' AND c2.cname = '計算機導論'
);
s, sc, c 簡化寫法,避免列名衝突。WITH feng_grade AS (
SELECT sc.grades
FROM student s
JOIN scores sc ON s.no = sc.no
JOIN course c ON sc.cno = c.cno
WHERE s.name = '高峰' AND c.cname = '計算機導論'
)
SELECT s.name
FROM student s
JOIN scores sc ON s.no = sc.no
JOIN course c ON sc.cno = c.cno
CROSS JOIN feng_grade fg
WHERE c.cname = '計算機導論' AND sc.grades > fg.grades;
> ALL 或 > (SELECT MAX(...))。三表關聯查詢核心:**明確主外鍵路徑 → 選擇連接類型 → 逐層添加篩選條件**。多練幾道,肌肉記憶自然形成。