这个问题找了好久,终于找到答案了,记录以下
表的笛卡尔连接过程:
- a. 从驱动表(左表)取出N条记录;
- b. 拿着这N条记录,依次与被驱动表(右表)中的每一行合并得到笛卡尔积
在join连接时哪个表是驱动表,哪个表是被驱动表:
- 1.当使用left join时,左表是驱动表,右表是被驱动表
- 2.当使用right join时,右表时驱动表,左表是驱动表
- 3.当使用join时,mysql会选择数据量比较小的表作为驱动表,大表作为被驱动表
对于如下
beauty表
girls表
二者连接的笛卡尔积:
SELECT *
FROM beauty, boys
结果如下(非全部数据):
可以看出来,boys表为驱动表,由于boys表放到了girls表后面,所以查询全部数据的时候,boys表的内容在girls表的后面。
因为在数学中笛卡尔积是不满足交换律的,所以一定要搞明白笛卡尔积是怎样做的,数学中关于笛卡尔积的计算例子如下: