• node mysql+node+express 表查询及接口建立(6)


      一、一张表查询

      查询一张表在上一章节说过了,查询全部使用*,具体的就写字段名 

    'SELECT * FROM company' //查询所有使用*
    'SELECT * FROM company WHERE id=?', //查询唯一标识id=x的所有字段
    'SELECT name,other FROM company WHERE id=?', //查询唯一标识id下的company表里面的name和other字段

     二、多表关联

      这里我建立了三个表

      表一 company:

        

      表二school:

      

      表三student:

      

      表连接方式:

        1、inner join          也叫等值连接,只有满足条件才会显示数据,否则为空

              在userSql.js新建newSql对象,属性innerList

           首先查询表里面所有数据    

    newSql:{
            detail:'SELECT * FROM student WHERE id=?',
            innerList: 'SELECT * FROM company c inner join school s on c.id=s.company_id'// c和s分别是两个表的别名,可以不写。 on 后面是需要满足的条件
        }
    

      这样查询出来的是表company的id等于表school的company_id的所有值,显示的是后面表school的字段和值,如果前面表company有字段和school表的字段重复,会发生覆盖行为,如果表company有表school不存在的字段,那么也会显示。列表长度为右表的长度

      如果on后面的c.id与s.company_id值不相等,那么显示的数据就是空

      

      注意:   如果想要显示两表的所有字段需要使用nestTables属性     这里left ,right ,inner cross, union都是一样的

        在userSql.js中

    newSql:{
            all:{sql:'SELECT * FROM company c inner join school s on c.id=s.company_id where c.id=?',nestTables:true}
        } // where 是选择表company的id的确定值,去掉为全部
    

      这样显示的是全部值,并且格式不符合我们写作习惯

        

          这里把表company和school的字段值分表列了出来,要想写在一个json里面需要改变nestTables的值,当改为'_'隔离符的时候,就可以把所有数据写在一个json里面了

        

           2、left join       取左边表的所有记录 匹配右边表的记录,右表字段覆盖左表相同的字段,如果左表存在右表不存在的字段,依然显示。  列表长度为左表的长度。

          如果on 后面的c.id与s.id 不相等,那么左边表company的所有数据会显示出来,右边表为空

        在newSql中

    leftList: 'SELECT * FROM company c left join school s on c.id=s.id'
    

      3、right join      与left join 正好相反, 不相等时候会把右边表数据显示出来,左边表的数据为空

            在newSql中

    rightList: 'SELECT * FROM company c right join school s on c.id=s.id',
    

      4、cross  join

         交叉连接,得到的结果是两个表的乘积; 效果和 inner join 一样

      5、union  (可以理解为或or的意思)

    unionList: 'SELECT * FROM company c left join school s on c.id=s.id union SELECT * FROM company c right join school s on c.id=s.id'
    

      union可以看做是or  如果left join和right join都相等,就都展示出来,如果left join不相等就左连接的第一个表的数据显示,第二张表的为空, right join 右连接的不相等第二张表显示,第一张表不显示。 显示的数据是左连接的返回值和右连接返回值之和。

     更多表连接只需要在前面基础上加连接方式和条件      例如:

     moreList: 'SELECT * FROM company c left join school s  on c.id=s.company_id left join student t on s.id=t.school_id'
    

      

  • 相关阅读:
    python模块总结(一)命令行解析模块argparse
    TCP(一)三次握手和四次挥手
    容器网络(四)vxlan
    容器网络(三)容器间通信
    kvm虚拟化(二)网络虚拟化
    KVM虚拟化(一)创建虚拟机
    数字操作 —— 9_ 回文数
    数字操作 —— 8_字符串转换整数(atoi)
    数字操作 —— 7_整数反转
    字符串操作 —— 763_划分字母区间
  • 原文地址:https://www.cnblogs.com/muzimumu/p/11911924.html
Copyright © 2020-2023  润新知