实操 - mysql 表连接笛卡尔积 (joinleft join)
1 为什么两张表连接会出现重复数据
2 表的连接过程是怎样的?
举例:
表 A:
1
0
表 B:
1
0
0
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


















