SQL Server 2000 支援 WHERE A.id = B.id(*) (左外部聯結) 與 WHERE A.id(*) = B.id (右外部聯結),**SQL Server 2005 已移除**,執行會報錯誤 102:「'*' 附近有語法錯誤」。
| 舊語法 | 標準語法 | 說明 |
|---|---|---|
WHERE A.id = B.id(*) | FROM A LEFT JOIN B ON A.id = B.id | 左外部聯結:保留 A 全部,B 無對應則 NULL |
WHERE A.id(*) = B.id | FROM A RIGHT JOIN B ON A.id = B.id | 右外部聯結:保留 B 全部,A 無對應則 NULL |
| 無對應 | FROM A FULL JOIN B ON A.id = B.id | 完整外部聯結:保留雙方全部,無對應則 NULL |
-- 左外部聯結:所有學生(含未選課) SELECT L.sno, sname, ssex, sage, sdept, cno, grade FROM student L LEFT JOIN sc ON L.sno = sc.sno; -- 右外部聯結:所有課程(含無人選修) SELECT sc.sno, course.cno, course.cname FROM sc RIGHT JOIN course ON sc.cno = course.cno; -- 完整外部聯結:學生與課程全保留 SELECT sc.sno, course.cno, course.cname FROM sc FULL JOIN course ON sc.cno = course.cno; -- 調換表順序結果相同 SELECT sc.sno, course.cno, course.cname FROM course FULL JOIN sc ON sc.cno = course.cno;
SELECT L.sno, sname, cno, grade FROM student L LEFT JOIN sc ON L.sno = sc.sno WHERE L.sno IN (95001, 95002, 95003, 95004);
遷移舊系統時,請全面改寫為標準 JOIN 語法,相容性與可讀性雙贏。