| 類型 | 語義 | 結果集 |
|---|---|---|
| INNER JOIN | 雙邊皆有匹配 | 交集 |
| FULL OUTER JOIN | 雙邊全保留,匹配則合併,否則 NULL | 並集 |
| CROSS JOIN | 笛卡爾積,無連接條件 | A × B 所有組合 |
| LEFT JOIN | 左表全保留,右表匹配則合併,否則 NULL | 左表為主 |
| RIGHT JOIN | 右表全保留,左表匹配則合併,否則 NULL | 右表為主 |
CREATE TABLE Consumers (ConsumerId INT NOT NULL, ConsumerName VARCHAR(10) NOT NULL); CREATE TABLE Orders (ConsumerId INT NOT NULL, OrderId VARCHAR(10) NOT NULL); INSERT Consumers VALUES (1, 'AA'), (2, 'BB'), (3, 'CC'); INSERT Orders VALUES (2, 'O100001'), (3, 'O100002'), (3, 'O100003'), (4, 'O100004');
SELECT * FROM Orders O INNER JOIN Consumers C ON O.ConsumerId = C.ConsumerId; -- 結果:3 筆(O100001-BB, O100002-CC, O100003-CC)
SELECT * FROM Orders O FULL OUTER JOIN Consumers C ON O.ConsumerId = C.ConsumerId; -- 結果:5 筆(含 Consumer 1 無訂單、Order 4 無消費者)
SELECT * FROM Orders O CROSS JOIN Consumers C; -- 無連接條件,純排列組合
SELECT * FROM Consumers C LEFT JOIN Orders O ON C.ConsumerId = O.ConsumerId; -- 結果:Consumer 1、2、3 全保留,1 的 Order 欄位為 NULL
SELECT * FROM Consumers C RIGHT JOIN Orders O ON C.ConsumerId = O.ConsumerId; -- 結果:Order 1~4 全保留,Order 4 的 Consumer 欄位為 NULL
掌握五種 JOIN 語義與結果集差異,是 SQL 多表查詢的基石。實務中 LEFT JOIN 最常用(主表帶明細),INNER JOIN 次之,FULL/RIGHT/CROSS 較少見。