表 A
| ID | Name |
|---|---|
| 1 | Tim |
| 2 | Jimmy |
| 3 | John |
| 4 | Tom |
表 B
| ID | Hobby |
|---|---|
| 1 | Football |
| 2 | Basketball |
| 2 | Tennis |
| 4 | Soccer |
-- 隱式語法 SELECT A.Name, B.Hobby FROM A, B WHERE A.id = B.id; -- 顯式語法(推薦) SELECT A.Name, B.Hobby FROM A INNER JOIN B ON A.id = B.id;
結果:Tim/Football、Jimmy/Basketball、Jimmy/Tennis、Tom/Soccer(John 無匹配被過濾)。
SELECT A.Name, B.Hobby FROM A LEFT JOIN B ON A.id = B.id;
保留 A 所有行,無匹配處為 NULL:John 對應 Hobby 為 NULL。
SELECT A.Name, B.Hobby FROM A RIGHT JOIN B ON A.id = B.id;
保留 B 所有行,A 無匹配處為 NULL。
USING (c1,c2,c3):簡化 ON a.c1=b.c1 AND a.c2=b.c2 ...NATURAL JOIN:自動匹配同名列,等價於包含所有同名列的 USING。STRAIGHT_JOIN:強制先讀右表,適用於右表數據量極小的優化場景。-- 錯誤寫法:MySQL 會解析為 t1,(t2 LEFT JOIN t3 ...) SELECT t1.id,t2.id,t3.id FROM t1,t2 LEFT JOIN t3 ON t3.id=t1.id WHERE t1.id=t2.id; -- 正確寫法:用括號明確優先級 SELECT t1.id,t2.id,t3.id FROM (t1,t2) LEFT JOIN t3 ON t3.id=t1.id WHERE t1.id=t2.id;