码迷,mamicode.com
首页 > 数据库 > 详细

实操-mysql表连接笛卡尔积(join、left join)

时间:2018-02-01 20:39:00      阅读:313      评论:0      收藏:0      [点我收藏+]

标签:esc   举例   一对多   逗号   img   卡尔   ffffff   就是   图片   

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)

标签:esc   举例   一对多   逗号   img   卡尔   ffffff   就是   图片   

原文地址:https://www.cnblogs.com/smallpigger/p/8400589.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!