表a
a1 a2
1 t1
2 t2
表b
b1 b2
1 u1
3 u3
(1)a INNER JOIN b記錄數是a,b交集的記錄數
SELECT * FROM a INNER JOIN b ON a.a1=b.b1
a1 a2 b1 b2
1 t1 1 u1
(2)a LEFT JOIN b記錄數是a的記錄數
LEFT JOIN= LEFT OUTER JOIN
SELECT * FROM a LEFT JOIN b ON a.a1=b.b1
a1 a2 b1 b2
1 t1 1 u1
2 t2
(3)a RIGHT JOIN b記錄數是b的記錄數
RIGHT JOIN= RIGHT OUTER JOIN
SELECT * FROM a RIGHT JOIN b ON a.a1=b.b1
a1 a2 b1 b2
1 t1 1 u1
3 u3
(4)a FULL JOIN b記錄數是a,b并集的記錄數
FULL JOIN= FULL OUTER JOIN
SELECT * FROM a FULL JOIN b ON a.a1=b.b1
a1 a2 b1 b2
1 t1 1 u1
2 t2
3 u3
注:
(1)mysql是不支持FULL JOIN的,可以使用UNOIN ALL來實現
(2)當有多個滿足條件的記錄時,
left join / right join 查詢到的總記錄數,會比表a / 表b 的總記錄數多。
例如,表a
a1 a2
1 t1
2 t2
表b
b1 b2
1 u1 <- 多條滿足條件的記錄
1 v1 <- 多條滿足條件的記錄
3 u3
SELECT * FROM a LEFT JOIN b ON a.a1=b.b1
a1 a2 b1 b2
1 t1 1 u1 <- 多條滿足條件的記錄
1 t1 1 v1 <- 多條滿足條件的記錄
2 t2