zoukankan      html  css  js  c++  java
  • 记一下数据库的多表查询

    (安利两个讲得不错的资源: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。

  • 相关阅读:
    css常见布局问题
    jsonp原理及同源策略
    执行webpack-dev-server时,提示端口被占用。
    PHP中的<<<运算符
    PHP中的字符串类型
    数据库系统的结构
    HDU 2516 取石子游戏
    常用MySql命令列选
    mysql简单语句
    微信小程序-循环
  • 原文地址:https://www.cnblogs.com/wangshen31/p/8734740.html
Copyright © 2011-2022 走看看