博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
sql练习(mysql版)
阅读量:6594 次
发布时间:2019-06-24

本文共 1275 字,大约阅读时间需要 4 分钟。

学生表student

老师表teacher

课程表course

分数表test


1.数学比语文成绩高的所有学生

select a.sid from(select * from test where cid=1) a,(select * from test where cid=2) bwhere a.sid=b.sidand a.score>b.score

 2.查询各科分数前三的学生

#第一种 select tmp.* from test as tmpwhere ( select count(*) from test where cid = tmp.cid and score > tmp.score )<3  order by cid,score desc
#第二种 select tmp.* from test as tmpwhere exists(select count(*) from test where cid = tmp.cid and score > tmp.scorehaving count(*)<3)order by cid,score desc

这个我是这么理解的,首先假设存在各科分数前三的表tmp,那么它的构成就是这样的

和原test表相比,有什么关联呢?

当满足tmp.cid=test.cid=1时,test.score中只有一个99满足>tmp中的其中一个数。

当tmp.cid=test.cid=2时,test.score中有2个数(98和91)满足>tmp中的其中一个数。

可以发现,test.score中,不能有三个数满足大于tmp中的数,不然的话,tmp将存在4个互不相同的数,那就不是前三了。

所以。。。当满足以下条件时,就能保证存在这么一个tmp表。

select count(*) from test where cid = tmp.cid and score > tmp.scorehaving count(*)<3

 3.查询每个学生数语英三门课的成绩,合并于一张表

SELECT tmp.sid,(SELECT score FROM test WHERE tmp.sid=sid AND cid='1') AS 'math',(SELECT score FROM test WHERE tmp.sid=sid AND cid='2') AS 'chinese',(SELECT score FROM test WHERE tmp.sid=sid AND cid='3') AS 'english'FROM test AS tmpGROUP BY tmp.sidORDER BY tmp.sid

 4.查询每个学生的数学成绩,并在成绩后面注明是否及格

select sid,score,if(score<60,'不及格','及格') as '是否及格' from test where cid=1

 

转载于:https://www.cnblogs.com/fj0716/p/6246373.html

你可能感兴趣的文章
“#51CTO学院四周年#互相交流,共同提高!
查看>>
同样是做内容创业,你为什么没有别人赚得多?
查看>>
检查Linux系统日志error和mysql错误日志的脚本
查看>>
高效制冷与自然冷却并重
查看>>
SQL Server 2008 全文搜索的一些知识
查看>>
GUN as 使用
查看>>
一周最新示例代码回顾 (4/16–4/22)
查看>>
TCPDUMP快速入门手册
查看>>
【转】Ubuntu13.04配置:Vim+Syntastic+Vundle+YouCompleteMe
查看>>
Nginx学习之二-配置项解析及编程实现
查看>>
点击edittext并显示其内容
查看>>
从机器学习谈起
查看>>
[Effective Java]第十一章 序列化
查看>>
[算法导论]红黑树实现(插入和删除) @ Python
查看>>
iPhone开发 数据持久化总结(终结篇)—5种数据持久化方法对比
查看>>
使用ReaderWriterLock类实现多用户读/单用户写同步
查看>>
中国式危机公关9加1策略(第十四章 国外危机应对案例參考)
查看>>
CKEditor上传插件
查看>>
Java 缩放图片工具类,创建缩略图、伸缩图片比例
查看>>
Rebuild Instance 操作详解 - 每天5分钟玩转 OpenStack(37)
查看>>