Mysql学习之笛卡尔积(交叉连接)
1、笛卡尔乘积是一个数学运算。
假设我有两个集合
X
和
Y
,那么
X
和
Y
的笛卡尔积就是
X
和
Y
的所有可能组合,也就是第一个对象来自于
X
,第二个对象来自于
Y 的所有可能。组合的个数即为两个集合中元素个数的乘积数。
在数学中的定义:假设集合A={a, b},集合B={0, 1, 2},则两个集合的笛卡尔积为{(a, 0), (a, 1), (a, 2), (b, 0), (b, 1), (b, 2)}。
图解如下图所示:
![](https://i-blog.csdnimg.cn/blog_migrate/0da9e23d0b6cde04550a85bcd3faa79b.png)
2、在不同的SQL语言中笛卡尔积的表示方法也各不相同。
在SQL92中,笛卡尔积也称为 交叉连接,英文是 CROSS JOIN 。在 SQL99 中也是使用 CROSS JOIN表示交叉连接。其作用就是可以把任意的数据表进行连接,即使这两张数据表不相关。
3、在MySQL中如下情况会出现笛卡尔积错误情况:
1-省略多个表的连接条件(或关联条件)
2-连接条件(或关联条件)无效
3-所有表中的所有行互相连接
解决办法:
在WHERE加入有效的连接条件。
SELECT 表1.column , 表2.column
FROM 表1,表2
WHERE 表1.column1 = 表2.column2; -- 连接条件
即:在多个表中有相同列时,在列名前加上表明前缀。