All Join
這篇文章完全來自于CoolSell.cn,我只是在他的基礎(chǔ)上做了些 MySql 的語法翻譯。把模模糊糊的 join 做一個總結(jié)
0、數(shù)據(jù)準(zhǔn)備 tableA tableB
id name id name
-- ---- -- ----
1 Pirate 1 Rutabaga
2 Monkey 2 Pirate
3 Ninja 3 Darth Vader
4 Spaghetti 4 Ninja
1钞艇、取交集
Select * FROM tableA
JOIN tableB
ON tableA.name = tableB.name
圖示
查詢結(jié)果
2猜欺、取左全集,沒有匹配的用 null 代替
SELECT * FROM tableA
left JOIN tableB
on tableA.name=tableB.name
圖示
查詢結(jié)果
3怨规、取右全集,沒有匹配的用 null 代替
Select * FROM tableA
RIGHT JOIN tableB
ON tableA.name = tableB.name
查詢結(jié)果
4锡足、取并集,由于 mysql 沒有 full join 只有使用 UNION
SELECT * FROM tableA
RIGHT JOIN tableB
on tableA.name=tableB.name
UNION
SELECT * FROM tableA
LEFT JOIN tableB
on tableA.name=tableB.name
圖示
查詢結(jié)果
5波丰、取不交叉的數(shù)據(jù)
SELECT * FROM tableA
RIGHT JOIN tableB
ON tableA.name=tableB.name
WHERE tableA.id IS NULL
UNION
SELECT * FROM tableA
LEFT JOIN tableB
ON tableA.name=tableB.name
WHERE tableB.id IS NULL
圖示
查詢結(jié)果
6、笛卡爾積舶得,笛卡爾乘積會產(chǎn)生 4 x 4 = 16 條
SELECT * FROM tableA JOIN tableB