mysql---多表关联

首先为大家介绍的集合概念:收藏有障碍、唯一性。

无序性:指集合内部元素没有相对顺序的概念,对于两个集合而言,仅仅要元素值和元素个数同样则两个集合相等。

唯一性:指集合内部元素不存在值相等的元素。

上图所看到的集合是错误的。由于有2个‘3’违背了唯一性

上图所看到的的两个集合是同样的。集合元素是无序的


集合的运算:交集、并集、相乘

交集:两个集合公共元素组成的集合

并集:连个集合全部元素组成的集合

相乘:也成笛卡尔积,两个集合全部元素组合的集合


集合1*集合2的结果例如以下:

当中(1,3)是集合1中的‘1’和集合2中的‘3’的组合

一张表事实上就相当于一个集合。每一行是集合的一个元素


如今有两表

goods表:包括商品ID。栏目ID,商品名


channel表:栏目ID,栏目名



如今想得到一张报价单包括商品ID,商品名,栏目ID。栏目名。该怎样去做?


全相乘:笛卡尔积 总共同拥有4*4=16 条记录

即两表各个行的全部组合


从两个表行的全部组合中选出满足要求的行


尽管得出了正确答案。可是假设goods表和channel表非常大的话,如goods表有1W条记录,channel也有1W条记录。则须要在内存中生成一张1W*1W的暂时表。并且绝大部分记录都不是我们所需的。所以全相乘浪费了空间、减少了效率。


如今考虑如何才干高效实现要求呢?常见的多表关联有左连接、右连接、内连接,哪些能帮助我们来实现上述要求呢?

左连接的语法:表A LEFT JOIN 表B ON 关联条件                      (从表B中找出与表A满足关联条件的行)

右连接的语法:表A RIGHT JOIN 表B ON 关联条件                   (从表A中找出与表B满足关联条件的行)

内连接的语法:表A INNER JOIN 表B ON 关联条件                   (求出表A和表B的公共集)


左连接:

第四条记录后面两个字段为NULL,由于'捷安特'的栏目信息在 表B中没有找到。


右连接:和左连接类似。能够相互转换如:表A LEFT JOIN 表B ON 关联条件  等价于 表B RIGHT JOIN 表A ON 关联条件  

推荐使用左连接。比較符合常规逻辑



内连接:



从左右连接和内连接的结果看,内连接少了一条记录,而左右连接出现了NULL的情况。

那左右连接和内连接之间究竟有什么关联呢?

如有两个表,表A和表B,他们能够通过公共字段来关联,他们之间的关系能够用下图来表示


A INNER JOIN B :得出的结果是表A和表B的公有数据集C

A lEFT JOIN B:得出的结果是表A记录集A1+公有数据集C。A1中会有NULL出现

B RIGHT JOIN A:得其结果是公共数据C+表B记录集B1,B1将有NULL出现

版权声明:本文博客原创文章。博客,未经同意,不得转载。

posted @ 2015-07-04 17:00  blfshiye  阅读(365)  评论(0编辑  收藏  举报