数据库操作常用的查询方法

⦁    内链接关联查询:

如果表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。

⦁    外链接关联查询:

表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查询结果组成一个虚表,查询方式和查询一个实体表相同的。
组成的虚拟表字段是不允许重复的,否则 :

select * from
(
   select * from(
       select * from (

       ) A
   ) B
) C;


 


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值