實操-mysql表連接笛卡爾積(join、left join)
阿新 • • 發佈:2018-02-01
卡爾 desc 順序 join mysql png blog 關系 方式
1、為什麽兩張表連接會出現重復數據
2、表的連接過程是怎樣的?
舉例:
表A:
1
0
表B:
1
0
0
2
執行語句:select * from A join B on A.id = B.id;
順序如下:
join形成的表:
1 1
1 0
1 0
1 2
0 1
0 0
0 0
0 2
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
實操-mysql表連接笛卡爾積(join、left join)