1. 程式人生 > >實操-mysql表連接笛卡爾積(join、left join)

實操-mysql表連接笛卡爾積(join、left join)

卡爾 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)