码迷,mamicode.com
首页 > 数据库 > 详细

mysql---多表关联

时间:2014-06-16 14:29:45      阅读:259      评论:0      收藏:0      [点我收藏+]

标签:mysql

首先要介绍一下集合的概念:集合具有无序性、唯一性。

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

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

bubuko.com,布布扣

上图所示集合是错误的,因为有2个‘3’违背了唯一性

bubuko.com,布布扣

上图所示的两个集合是相同的,集合元素是无序的


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

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

并集:连个集合所有元素组成的集合

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

bubuko.com,布布扣

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

bubuko.com,布布扣

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

一张表其实就相当于一个集合,每一行是集合的一个元素


现在有两表

goods表:包含商品ID,栏目ID,商品名,有8个商品

bubuko.com,布布扣

channel表:栏目ID,栏目名,有3个栏目

bubuko.com,布布扣


想在想得到一张报价单包含商品ID,商品名,栏目ID,栏目名,该如何去做?


全相乘:笛卡尔积 总共有3*8=24 条记录

即两表各个行的所有组合

bubuko.com,布布扣

选出其中满足要求的行

bubuko.com,布布扣

虽然得出了正确答案,但是如果goods表和channel表很大的话,如goods表有1W条记录,channel也有1W条记录。则需要在内存中生成一张1W*1W的临时表,而且绝大部分记录都不是我们所需的。所以全相乘浪费了空间、降低了效率。


左连接:语法 表1 left join 表2 on 条件

以表1为基准选出满足条件的表2的行

bubuko.com,布布扣


右连接:语法 表2 right join 表1 on 条件  等价于 表1 left join 表2 on 条件

所以左右连接往往可以互换,但是右连接有点反逻辑思维,建议选用左连接。

bubuko.com,布布扣


内连接:语法 表1 inner join 表2 on 条件

bubuko.com,布布扣

可见左右连接、内连接、全相乘都可以完成所要求的功能,但是全相乘的效率是最低的。

下篇博文,再详细介绍左右连接、内连接之间的区别和联系。

mysql---多表关联,布布扣,bubuko.com

mysql---多表关联

标签:mysql

原文地址:http://blog.csdn.net/my_mao/article/details/31349063

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!