记一下数据库的多表查询
Posted 汪神
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了记一下数据库的多表查询相关的知识,希望对你有一定的参考价值。
(安利两个讲得不错的资源: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。
以上是关于记一下数据库的多表查询的主要内容,如果未能解决你的问题,请参考以下文章