FROM join_table join_type join_table [ON (join_condition)]
join_type:
INNER JOIN -- 內連接
LEFT OUTER JOIN -- 左外連接
RIGHT OUTER JOIN -- 右外連接
FULL OUTER JOIN -- 全外連接
CROSS JOIN -- 交叉連接 (笛卡兒積)
ON a.col = b.col,保留重複欄位。>, >=, <, <=, <>, !>, !<。-- 等值連接:同城市作者與出版社
SELECT * FROM authors a INNER JOIN publishers p ON a.city = p.city;
-- 自然連接:移除重複 city, state
SELECT a.*, p.pub_id, p.pub_name, p.country
FROM authors a INNER JOIN publishers p ON a.city = p.city;
| 類型 | 保留哪邊所有列 | 無匹配處 |
|---|---|---|
| LEFT OUTER JOIN | 左表 | 右表欄位補 NULL |
| RIGHT OUTER JOIN | 右表 | 左表欄位補 NULL |
| FULL OUTER JOIN | 雙表 | 雙邊補 NULL |
-- 左外連接:論壇文章 + 作者 (無作者仍顯示文章)
SELECT a.*, b.* FROM luntan a LEFT JOIN usertable b ON a.username = b.username;
-- 全外連接:所有城市 + 所有作者
SELECT a.*, b.* FROM city a FULL OUTER JOIN user b ON a.username = b.username;
SELECT type, pub_name FROM titles CROSS JOIN publishers ORDER BY type;
DATALENGTH(col1) = DATALENGTH(col2)。表與自身連接,需用別名區分:
SELECT e1.name AS Employee, e2.name AS Manager
FROM emp e1 LEFT JOIN emp e2 ON e1.mgr_id = e2.emp_id;
LEFT JOIN,由主表延伸,閱讀性最佳。WHERE a.id = b.id 寫法,改用明確 JOIN 語法。