| JOIN 類型 | 回傳內容 | 記憶口訣 |
|---|---|---|
| INNER JOIN | 兩表皆符合連接條件的列 | 「內」= 交集 |
| LEFT JOIN | 左表全部列 + 右表匹配列(無匹配則 NULL) | 「左」= 左表為主 |
| RIGHT JOIN | 右表全部列 + 左表匹配列(無匹配則 NULL) | 「右」= 右表為主 |
-- 表 A
aID | aNum
1 | a20050111
2 | a20050112
3 | a20050113
4 | a20050114
5 | a20050115
-- 表 B
bID | bName
1 | 2006032401
2 | 2006032402
3 | 2006032403
4 | 2006032404
8 | 2006032408
SELECT * FROM A LEFT JOIN B ON A.aID = B.bID;
| aID | aNum | bID | bName |
|---|---|---|---|
| 1 | a20050111 | 1 | 2006032401 |
| 2 | a20050112 | 2 | 2006032402 |
| 3 | a20050113 | 3 | 2006032403 |
| 4 | a20050114 | 4 | 2006032404 |
| 5 | a20050115 | NULL | NULL |
→ A 表 5 列全保留,B 表無匹配處補 NULL。
SELECT * FROM A RIGHT JOIN B ON A.aID = B.bID;
| aID | aNum | bID | bName |
|---|---|---|---|
| 1 | a20050111 | 1 | 2006032401 |
| 2 | a20050112 | 2 | 2006032402 |
| 3 | a20050113 | 3 | 2006032403 |
| 4 | a20050114 | 4 | 2006032404 |
| NULL | NULL | 8 | 2006032408 |
→ B 表 5 列全保留,A 表無匹配處補 NULL。
SELECT * FROM A INNER JOIN B ON A.aID = B.bID;
| aID | aNum | bID | bName |
|---|---|---|---|
| 1 | a20050111 | 1 | 2006032401 |
| 2 | a20050112 | 2 | 2006032402 |
| 3 | a20050113 | 3 | 2006032403 |
| 4 | a20050114 | 4 | 2006032404 |
→ 僅保留雙方皆有匹配的 4 列。
兩表所有列皆保留,無匹配處雙邊補 NULL。相當於 LEFT JOIN UNION RIGHT JOIN。
FROM table1 LEFT JOIN table2 ON table1.field = table2.field
-- 建議在 FROM 子句指定 JOIN,將過濾條件留在 WHERE,閱讀性更佳
B.bName = 'X'),LEFT JOIN 會退化為 INNER JOIN。需移至 ON 子句。