博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mysql---多表关联
阅读量:5306 次
发布时间:2019-06-14

本文共 1208 字,大约阅读时间需要 4 分钟。

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

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

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

上图所看到的集合是错误的。由于有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出现

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

转载于:https://www.cnblogs.com/blfshiye/p/4620920.html

你可能感兴趣的文章
开发进度一
查看>>
MyBaits学习
查看>>
管道,数据共享,进程池
查看>>
CSS
查看>>
[LeetCode] 55. Jump Game_ Medium tag: Dynamic Programming
查看>>
[Cypress] Stub a Post Request for Successful Form Submission with Cypress
查看>>
程序集的混淆及签名
查看>>
判断9X9数组是否是数独的java代码
查看>>
00-自测1. 打印沙漏
查看>>
UNITY在VS中调试
查看>>
SDUTOJ3754_黑白棋(纯模拟)
查看>>
Scala入门(1)Linux下Scala(2.12.1)安装
查看>>
如何改善下面的代码 领导说了很耗资源
查看>>
Quartus II 中常见Warning 原因及解决方法
查看>>
php中的isset和empty的用法区别
查看>>
Android ViewPager 动画效果
查看>>
pip和easy_install使用方式
查看>>
博弈论
查看>>
Redis sentinel & cluster 原理分析
查看>>
我的工作习惯小结
查看>>