031医疗项目-模块三:药品供应商目录模块——sql补充知识
Posted jim_shen
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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
小结:如果主查询表字段从关联表只查询出一条记录,这个字段就可以作为内链接关联字段
--内链接的错误的例子,通过关联查询出重复记录
--使用groupid从select 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查询结果组成一个虚表,查询方式和查询一个实体表相同的。
组成的虚拟表字段是不允许重复的,否则 :
以上是关于031医疗项目-模块三:药品供应商目录模块——sql补充知识的主要内容,如果未能解决你的问题,请参考以下文章
029医疗项目-模块三:药品供应商目录模块——数据模型的分析(建表)
034医疗项目-模块三:药品供应商目录模块——供货商药品目录(批量)添加药品的功能---------Service
032医疗项目-模块三:药品供应商目录模块——Service层和Action层和调试
029医疗项目-模块三:药品供应商目录模块——Dao层:基本的查询语句的编写
023医疗项目-模块二:药品目录的导入导出-从数据库中查出数据用XSSF导出excel并存放在虚拟目录最后下载(包括调试)