SQL 連接操作是多表查詢的核心,按結果集範圍分為四類,對應集合論的交集、左差集、右差集、並集。
表 a (主表) 表 b (從表) id | name id | job | parent_id 1 | 張三 1 | 23 | 1 2 | 李四 2 | 34 | 2 3 | 王五 3 | 34 | 4 關聯條件:a.id = b.parent_id
SELECT a.*, b.* FROM a INNER JOIN b ON a.id = b.parent_id; -- 等價於 SELECT a.*, b.* FROM a JOIN b ON a.id = b.parent_id;
結果:僅返回雙方均匹配的行 (2 行)
1 | 張三 | 1 | 23 | 1 2 | 李四 | 2 | 34 | 2
SELECT a.*, b.* FROM a LEFT JOIN b ON a.id = b.parent_id;
結果:左表所有行,無匹配處填 NULL (3 行)
1 | 張三 | 1 | 23 | 1 2 | 李四 | 2 | 34 | 2 3 | 王五 | NULL | NULL | NULL
SELECT a.*, b.* FROM a RIGHT JOIN b ON a.id = b.parent_id;
結果:右表所有行,無匹配處填 NULL (3 行)
1 | 張三 | 1 | 23 | 1 2 | 李四 | 2 | 34 | 2 NULL | NULL | 3 | 34 | 4
SELECT a.*, b.* FROM a FULL JOIN b ON a.id = b.parent_id;
結果:雙表所有行,無匹配處填 NULL (4 行)
1 | 張三 | 1 | 23 | 1 2 | 李四 | 2 | 34 | 2 NULL | NULL | 3 | 34 | 4 3 | 王五 | NULL | NULL | NULL
| 業務場景 | 推薦連接 | 理由 |
|---|---|---|
| 雙方必須同時存在 (訂單-用戶) | INNER JOIN | 效能最優,結果集最小 |
| 主表全量展示,從表可選 (用戶-訂單列表) | LEFT JOIN | 保證主表數據不丟失 |
| 從表全量,主表可選 (字典表關聯) | RIGHT JOIN | 語義更清晰,或用 LEFT JOIN 互換表順序 |
| 雙向全量對賬 (數據核對) | FULL JOIN | 發現雙方孤兒數據 |
掌握四種連接的語義差異與結果集特徵,是編寫高效 SQL 的基礎。實際開發中 90%+ 場景使用 INNER JOIN 與 LEFT JOIN,RIGHT JOIN 可通過調換表順序轉為 LEFT JOIN,FULL JOIN 多用於數據治理與對賬場景。