連接是多表查詢核心。本文深入講解 交叉連接 (CROSS JOIN) 與 內部連接 (INNER JOIN) 的運作機制、應用場景與寫法安全性。
SELECT C.custid, E.empid
FROM Sales.Customers AS C CROSS JOIN HR.Employees AS E
ORDER BY E.empid
91 客戶 × 9 員工 = 819 列。
Digits(0-9)INSERT INTO Nums(n)
SELECT D6.digit*100000 + D5.digit*10000 + D4.digit*1000
+ D3.digit*100 + D2.digit*10 + D1.digit + 1
FROM Digits D1 CROSS JOIN Digits D2 CROSS JOIN Digits D3
CROSS JOIN Digits D4 CROSS JOIN Digits D5 CROSS JOIN Digits D6
ORDER BY n
SELECT f.Col1 FROM FirstTable f INNER JOIN SecondTable s ON s.Col1 = f.Col1
SELECT f.Col1 FROM FirstTable f INNER JOIN SecondTable s ON s.Col1 <> f.Col1
等價於 CROSS JOIN ... WHERE s.Col1 <> f.Col1。
表 A 有 1 列值 2,表 B 有 5 列值 2 → 內部連接產生 5 列結果,非僅 1 列。
| 標準 | 語法 | 缺失 ON 時 |
|---|---|---|
| SQL-92 (推薦) | INNER JOIN ... ON ... | 語法錯誤,編譯失敗 |
| SQL-89 (舊式) | FROM A, B WHERE ... | 靜默產生交叉連接,結果錯誤難發現 |



結論:永遠使用 ANSI SQL-92 明確 ON 子句,避免遺漏條件導致資料爆炸。