zoukankan      html  css  js  c++  java
  • 031医疗项目-模块三:药品供应商目录模块——供货商药品目录查询功能----------sql补充知识

    这个补充知识有一个点很有必要,视屏上的老师提出一点:

      内链接关联查询:

      如果表A和表B有一个外键关联 ,可以通过外键进行内链接查询

       select dictinfo.*, dicttype.typename

      from dictinfo, dicttype

     where dictinfo.typecode = dicttype.typecode

       --不通过外键,通过groupid查询用户类型的代码结果集,只能查询出一条记录,可以使用内链接

    select sysuser.*, dictinfo.info

      from sysuser,

           (select dictcode, typecode, info from dictinfo where typecode = 's01') dictinfo

     where sysuser.groupid = dictinfo.dictcode

    小结:如果主查询表字段从关联表只查询出一条记录,这个字段就可以作为内链接关联字段

    --内链接的错误的例子,通过关联查询出重复记录

    --使用groupidselect dictcode, typecode, info from dictinfo可以找到多个记录,不能使用内链接,可能会出现重复记录

     

    select sysuser.*

      from sysuser, (select dictcode, typecode, info from dictinfo) dictinfo

     where sysuser.groupid = dictinfo.dictcode

    注意:如果使用内链接查询出现重复记录,首先去思考是否是sql写错了,不能直接去使用distinct去除重复记录。

    有一些特殊情况下还是需要使用distinct去除重复记录,比如复杂的统计分析sql。

    看这个项目视屏的时候我刚好也在看50个查询系列,写那里的sql查询语句我就碰到了这个问题。我也用了Distinct函数,原来是不能用的啊。

      外链接关联查询:

    表A,表B中只有一部分数据和表A匹配,不能使用内链接。

    主查询是表A,只能使用外链接。

    --查询用户所属单位,sysid对应三张表的id

     

    select sysuser.*,useryy.mc from sysuser left join useryy on sysuser.sysid = useryy.id

     

    select * from useryy right join sysuser on sysuser.sysid = useryy.id

     

    --以上的需要不能使用内链接

    select sysuser.*,useryy.mc from sysuser, useryy where  sysuser.sysid = useryy.id

    小结:

    表A中从表B中只能关联查询一部分数据,只能使用外链接

      子查询

    select sysuser.*,

     (select * from useryy where id = sysuser.sysid)

     from sysuser

    子查询只能返回一列,否则 :

     

    子查询只允许返回一行,否则 :

     

    正确的sql:

    --子查询

    --根据sysid取出单位名称

    --根据groupid查询用户类型代码对应的名称

    select sysuser.*,

     (select mc from useryy where id = sysuser.sysid)sysmc,

     (select info from dictinfo where dictcode = sysuser.groupid and typecode = 's01')groupname

     from sysuser

       嵌套表

    可以将一个sql查询结果组成一个虚表,查询方式和查询一个实体表相同的。

    组成的虚拟表字段是不允许重复的,否则 :

     

  • 相关阅读:
    使用RestTemplate上传文件到远程接口
    设计模式(五)之适配器模式
    设计模式(四)之装饰者模式
    设计模式(三)之模板方法模式
    设计模式(二)之责任链模式
    BUG-jQuery提交表单submit方法-TypeError: e[h] is not a function
    数据类型--集合 set
    数据类型--字典 dic
    字符 str 串需要记住的语法
    数据类型--列表 list
  • 原文地址:https://www.cnblogs.com/shenxiaoquan/p/6127285.html
Copyright © 2011-2022 走看看