實操 - mysql 表連接配接笛卡爾積 (joinleft join)
1 為什麼兩張表連接配接會出現重複資料
2 表的連接配接過程是怎樣的?
舉例:
表 A:
1
表 B:
1
2
執行語句: select * from A join B on A.id = B.id;
順序如下:
join 形成的表:11
10
10
12
01
00
00
02
on 之後:
1 1
0 0
0 0
是以表連接配接後出現了重複資料
兩張表的關系存在一對多的關系, 是以就會出現重複情況
什麼是笛卡爾積呢?
就是兩張表連接配接的時候, 是通過笛卡爾積的方式連接配接
笛卡爾 (Descartes) 乘積又叫直積假設集合 A={a,b}, 集合 B={0,1,2}, 則兩個集合的笛卡爾積為 {(a,0),(a,1),(a,2),(b,0),(b,1), (b,2)} 可以擴充到多個集合的情況類似的例子有, 如果 A 表示某學校學生的集合, B 表示該學校所有課程的集合, 則 A 與 B 的笛卡爾積表示所有可能的選課情況
是以兩個表連接配接後 (使用 join 逗号連接配接) 就是笛卡爾積
無論是 join 還是 left join, 都是先把表以笛卡爾積的方式連接配接, 然後通過 on 來篩選資料, join 隻顯示符合條件的資料, left join 不僅會顯示所有滿足條件的資料, 而且還會把主表沒有比對上的也顯示出來
left join 後面必須加上 on
來源: http://www.bubuko.com/infodetail-2483665.html