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

SQL 連接寫法大PK:ANSI SQL-86 舊語法 vs ANSI SQL-92 標準 JOIN 語法該如何選擇?

     編輯:關於SqlServer

兩種寫法對比

-- 寫法 1:舊式 WHERE 連接(ANSI SQL-86)
SELECT A.c1, A.c2, B.c1, B.c2
FROM table1 A, table2 B
WHERE A.id = B.id;

-- 寫法 2:標準 JOIN 語法(ANSI SQL-92)
SELECT A.c1, A.c2, B.c1, B.c2
FROM table1 A
JOIN table2 B ON A.id = B.id;

歷史淵源與標準演進

  • SQL 起源:IBM 發明,Oracle 商業化推廣,ANSI 後續標準化
  • ANSI SQL-86:入門級標準,支援 WHERE 連接,Oracle 7、早期 SQL Server 均相容
  • ANSI SQL-92:引入 INNER JOIN、LEFT/RIGHT JOIN 等過渡級特性,Oracle 9i 才完整支援
  • 標準分級:ANSI-92 定義四級(入門/過渡/中級/完整),多數資料庫僅達入門級,JOIN 屬過渡級

效能與功能差異

維度WHERE 連接JOIN 語法
執行計畫完全相同完全相同
外部連接Oracle: (+) / SQL Server: *=(已棄用)標準 LEFT/RIGHT JOIN
可讀性條件混雜於 WHERE連接條件與篩選條件分離
維護性複雜查詢易出錯結構清晰,不易遺漏連接條件
跨平台相容極佳(舊版資料庫皆支援)現代資料庫全支援,舊版可能不支援

選擇建議

優先使用 ANSI SQL-92 JOIN 語法,理由:

  • 語義明確,連接邏輯與業務篩選分離
  • 支援完整的外部連接語法,避免舊式 (+) 的限制(如無法全外部連接)
  • 現代開發規範與 ORM 框架均採用標準 JOIN

例外場景保留 WHERE 連接:

  • 需相容極舊版資料庫(如 Oracle 8i 以下、SQL Server 2000 早期版本)
  • 極簡單的雙表內部連接,團隊統一習慣為 WHERE 風格

進階:多表連接的結合性陷阱

標準 JOIN 支援括號控制連接順序:

SELECT * FROM (A INNER JOIN B ON A.id = B.id) INNER JOIN C ON A.id = C.id;

舊語法無法表達此結構,僅能依賴 WHERE 條件順序與優化器判斷。

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