A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 聂广强 中级黑马   /  2013-7-12 00:11  /  1348 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文



一般的查询只能查询出这个样子 sql语句
select m.MName,f.FName,s.Score
from Member m,f,score s
where m.MID=s.MID and f.FID=s.FID
效果是这个样子的但是与我们所预期的是不一样的

这个是该怎么查呢
在网上搜了老半天大致了解了这种显示数据的方式以及语法
一种是比较笨重的方式 这个方式比较好理解就是把每个科目都搜索出来然后添加到一个新列中
  1. select 姓名=a.MName,
  2. 语文=(select score from score s,F,Member m  
  3. where m.MID=s.MID and f.FID=s.FID and m.MName=a.MName and f.FName='语文'),
  4. 数学=(select score from score s,F,Member m  
  5. where m.MID=s.MID and f.FID=s.FID and m.MName=a.MName and f.FName='数学'),
  6. 历史=(select score from score s,F,Member m  
  7. where m.MID=s.MID and f.FID=s.FID and m.MName=a.MName and f.FName='历史'),
  8. 英语=(select score from score s,F,Member m  
  9. where m.MID=s.MID and f.FID=s.FID and m.MName=a.MName and f.FName='英语')
复制代码
查询结果是


还有一种是比较新颖的方式
  1. select m.MName 姓名,
  2. 语文=avg(case when f.FName='语文' then s.Score end),
  3. 数学=max(case when f.FName='数学' then s.Score end),
  4. 历史=max(case when f.FName='历史' then s.Score end),
  5. 英语=max(case when f.FName='英语' then s.Score end)
  6. from Member m,f,score s
  7. where m.MID=s.MID and f.FID=s.FID
  8. group by m.MName
复制代码
查询结果是

这个方式就是用 类似于编程语言中的 if。。。else 。。。但是在数据库sql语言之中只能用case when then end 来表示
然后用聚合函数来显示 这个为什么要用聚合函数我也不是很明了  
还请各位见谅我只是知道这种用法但为什么这么用 还请各位具体的讲解



评分

参与人数 1技术分 +1 收起 理由
zhangcheng5468 + 1 赞一个!

查看全部评分

1 个回复

正序浏览
值得学习ing!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马