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

记一下数据库的多表查询

时间:2018-04-07 22:57:10      阅读:356      评论:0      收藏:0      [点我收藏+]

标签:name   一个   rom   关联表   内连接   tps   显示   nal   body   

(安利两个讲得不错的资源:https://www.cnblogs.com/tilv37/p/5199139.html 和 https://jingyan.baidu.com/article/63acb44acfa95161fcc17e8a.html

 

稍微讲一下背景,现在有个药材表、基地表、原料去向表,还有个原料去向的关联表。这个原料去向是这样的,某个基地中某种药材的原料去向。也就是说,这个原料去向关联表和基地还有药材关联在一起了。

药材表:

技术分享图片

(后面没有展现的属性不用理它)

基地表:

 技术分享图片

 

原料去向表:

技术分享图片

 

原料去向关联表:

技术分享图片

 

想要做的是,首页是药材,点击某个药材进药材详情表(基地表),然后再基地表中有个查看原料去向的控件,点击可以看见:

技术分享图片

这样一个表,然后就要用到表的关联查询:

 

怎样叫做关联查询呢?其实就是 本来是两张表的东西,通过join(先不管是left还是right还是内连接)和一些join的关系,条件变成一张表(可以理解称临时表):

技术分享图片

先来讲一下 内连接

就是直接一个join:

SELECT tg.g_name, tm.g_medicinalGone_sale, tm.g_medicinalGone_proportion, tm.g_medicinalGone_price 

FROM t_medicinal_productbase_medicinalgone as tm JOIN t_medicinal_gone as tg on tm.g_medicinalGone_id = tg.id

 

 它的结果是只输出包含连接条件的数据行:

技术分享图片

 

然后是外连接

外连接是不会对数据进行过滤的,就是说满足连接条件的输出,不满足连接条件的它也输出(没数据的列或行就输出默认的空值),可以说外连接只是将两个表临时拼接成一个表

外连接有左连接:LEFT JOIN   和右连接: RIGHT JOIN

左右的区别就是以哪个表为基准来拼接两个表   FROM t1 LEFT JOIN t2——这种就按左边那个t1为标准,如果这里是RIGHT JOIN的话,就以右边那个t2为标准,

下面两个例子可以很好得看到差别

左连接:(左边为原料去向关联表右边为原料去向表)

SELECT tg.g_name, tm.g_medicinalGone_sale, tm.g_medicinalGone_proportion, tm.g_medicinalGone_price 

FROM t_medicinal_productbase_medicinalgone as tm LEFT JOIN t_medicinal_gone as tg on tm.g_medicinalGone_id = tg.id

 

技术分享图片

 

 右连接:(左边为原料去向关联表右边为原料去向表)

技术分享图片

我们可以看到,因为以右边的表为基准,所以右边的行一定要全部显示,但有些原料去向没有数据的(没有属于哪个基地中的哪个药材),所以有不符合条件的原料去向,但还是要全部显示出来。于是就显示默认的空值Null。

记一下数据库的多表查询

标签:name   一个   rom   关联表   内连接   tps   显示   nal   body   

原文地址:https://www.cnblogs.com/wangshen31/p/8734740.html

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