首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> SQL Server 2005

SQL Server 2005 外部聯結語法:LEFT/RIGHT/FULL JOIN 取代舊式 *=/*= 完整範例

     編輯:SQL Server 2005

舊語法不再支援

SQL Server 2000 支援 WHERE A.id = B.id(*) (左外部聯結) 與 WHERE A.id(*) = B.id (右外部聯結),**SQL Server 2005 已移除**,執行會報錯誤 102:「'*' 附近有語法錯誤」。

標準 ANSI JOIN 語法對照

舊語法標準語法說明
WHERE A.id = B.id(*)FROM A LEFT JOIN B ON A.id = B.id左外部聯結:保留 A 全部,B 無對應則 NULL
WHERE A.id(*) = B.idFROM 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;

ON 子句後可接 WHERE 進一步篩選

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);

行為總結

  • LEFT JOIN:左表全部保留,右表無對應 → NULL。
  • RIGHT JOIN:右表全部保留,左表無對應 → NULL。
  • FULL JOIN:雙表全部保留,任一方無對應 → NULL。

遷移舊系統時,請全面改寫為標準 JOIN 語法,相容性與可讀性雙贏。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved