笛卡尔乘积(笛卡尔积优化)

文章转载自《开发者圆桌》一篇10岁猿猴原创文章的交流与开发心得,特别适合刚入职场几年的新手或微信微信官方账号在程使用。多表SQL关联,相信大家都会写,但是你可能

文章转载自《开发者圆桌》一篇10岁猿猴原创文章的交流与开发心得,特别适合刚入职场几年的新手或微信微信官方账号在程使用。

多表SQL关联,相信大家都会写,但是你可能不知道背后的原理。今天我们来拆解一下多表SQL关联。如果你已经知道什么是笛卡尔积,可以跳过。

笛卡尔乘积是什么?

笛卡尔积是指两个集合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)}。

看了概念,你可能并没有真正理解,因为太抽象了。我们来形象化一下,看看集合A的class表和集合B的student表的乘积是什么:

笛卡尔乘积(笛卡尔积优化)

笛卡尔乘积(笛卡尔积优化)

两组相乘后,班级表数据复制5次,学生表数据复制3次,两组数据重复复制。如下图所示,是集合A和集合b的笛卡尔积。

笛卡尔乘积(笛卡尔积优化)

2表SQL关联

我们一步步解释select * from [class] c,[student]s where c . classid = s . student classid语句。

1.首先将class表和student表进行笛卡尔积,两个表的数据重复复制生成下面的临时表。

笛卡尔乘积(笛卡尔积优化)

2.然后通过where后面的限制条件,只选择那些StudentClassID和ClassID相等的行(上图中绿色部分),最后得到所选表的子集。

笛卡尔乘积(笛卡尔积优化)

当然,where后面的限制不仅是等号,还有比较运算符,包括>:(大于),> =(大于等于),< =(小于等于),<(小于),!& gt(不大于),!& lt(不小于)和< & gt(不等于)。当然,约束中涉及的两列的数据类型必须匹配。

2+表SQL关联

其实想明白很简单。三个表的关联可以分解成两个成对的关系,即得到成对的结果后,再关联第三个表。也是3块多的逻辑。复杂的问题拆解后会变得简单。

临终遗言

相关性是笛卡尔乘积的理论结果,但是每个数据库厂商的实现会有所不同。与多个表相关联的下列表之间的位置关系可能会影响SQL的执行效率。这个要具体分析不同的数据库产品。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。

作者:美站资讯,如若转载,请注明出处:https://www.meizw.com/n/191299.html

发表回复

登录后才能评论