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
原文地址:https://www.cnblogs.com/smallpigger/p/8400589.html
时间: 2024-10-06 14:13:16