首先为大家介绍的集合概念:收藏有障碍、唯一性。
无序性:指集合内部元素没有相对顺序的概念,对于两个集合而言,仅仅要元素值和元素个数同样则两个集合相等。
唯一性:指集合内部元素不存在值相等的元素。
上图所看到的集合是错误的。由于有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出现
版权声明:本文博客原创文章。博客,未经同意,不得转载。