关于笛卡尔积

数学定义:

      设有集合A和B,两个集合中元素若干,用A中元素为第一元素,B中元素为第二元素构成一个有序对,所有这样有序对组成的集合叫做,A与B的笛卡尔积。表示为AxB(A集合和B集合相乘,包含了集合A中元素和集合B中元素相结合的所有的可能性。既两个集合相乘得到的新集合的元素个数是 A集合的元素个数 × B集合的元素个数;)

      符号化为: A×B={(x,y)|x∈A∧y∈B}

      例如:A×B={(a, 0), (a, 1), (a, 2), (b, 0), (b, 1), (b, 2)}

                B×A={(0, a), (0, b), (1, a), (1, b), (2, a), (2, b)}

 

 

出现场景:

      数据库表连接数据行匹配时所遵循的算法就是以上提到的笛卡尔积,表与表之间的连接可以看成是在做乘法运算。

      在数据库中,两表相连,如果不加连接条件就会造成广义笛卡尔积

      假如A表有10000条数据,B表有10000条数据,那么10000*10000就会出现1亿的数据量。所以在两表连接时,一定要添加连接条件,并保证逻辑性。

 

如何避免笛卡尔积:

     1.在使用条件的时候注意格式为:表名.列名=表名.列名  因为有时候两张表会出现同样的列名,会导致MySQL没法区分,

加上表名调用列名就会不造成歧义。具体命令格式 SELECT  列名1, 列名2  FORM 表名1,表名2 WHERE 表名1.列名1=表名2.列名。

     2.使用内连接;

     3.使用左连接;

     4.使用右连接;

两表关联的时候通过最小的粒度关联,最小粒度可以理解为表中的唯一性约束的字段值.

   

      

      

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值