一、设计表
1、设计表 查询语句之前先设计四张表:student、teacher、course、score student:sid(学号)、sname(姓名)、sage(年龄)、ssex(性别) teacher:tid(老师编号)、tname(老师名字) course:cid(课程序号)、cname(课程名字)、tid(代课老师id) score:sid(学生id)、cid(课程id)、score(成绩) 2、找表关系 可以看到四张表之间是有联系的

二、查询语句实线
1、查询(“001”课程比“002”课程成绩高)的所有的学生的学号。 思路:先找出上过001课程的学生,再找出上过002课程的学生,再找出两门课都上过且001比002成绩高的学生。所以这里将SELECT sid,score FROM score WHERE cid='001'和SELECT sid,score FROM score WHERE cid='002'的结果集作为查询对象 SELECT a.sid AS '学号'
FROM (SELECT sid,score FROM score WHERE cid='001')AS a,
(SELECT sid,score FROM score WHERE cid='002')AS b
WHERE a.sid=b.sid AND a.score>b.score;
2、查询平均成绩大于等于60分的同学的学号和平均成绩 思路:此处需要注意不加group by的话,没有分组,聚合函数只会以score表的数据计算,所以avg(score)只有一个结果,但是sid却有多个。所以此处应该使用group by,这样的话,avg(score)计算的是分组后每个组的平均成绩 SELECT sid,avg(score)
FROM score
GROUP BY sid HAVING AVG(score)>=60;
3、查询所有同学的学号、姓名、选课数、总成绩 思路:一般应该是能够将要查询的内容都联系在一起的情况下查询尽可能少的表 SELECT s.sid '学号',sname '姓名',COUNT(score) '选课数',AVG( score) '平均成绩'
FROM student s,score WHERE s.sid=score.sid GROUP BY s.sid;
4、查询姓“李”的老师的个数
SELECT count(tname) FROM teacher WHERE tname LIKE "李_%" ;
5、查询没学过“叶平”老师的课程的同学的学号、姓名 Not In:不在范围内 SELECT sid,sname
FROM student
WHERE sid NOT IN(SELECT score.sid FROM teacher,course,score where course.tid=teacher.tid AND teacher.tname='叶平' AND course.cid=score.cid);
6、查询所有有挂科的同学的学号和姓名 SELECT s.sid '学号',sname '姓名'
FROM student s,score o
where s.sid=o.sid AND score<60 GROUP BY sname;
7、查询至少一门课程与学生学号为“2”的同学所学课程相同的学生学号和姓名 SELECT s.sid,s.sname
FROM student s,score o
WHERE s.sid=o.sid AND o.cid IN (SELECT cid FROM score WHERE sid=2) AND s.sid<>2 GROUP BY s.sid;
8、统计列印各个科目的成绩,各个科目按分数段 课程ID,课程名称,【100-85】,【85-70】,【70-60】,【60-0】 SELECT course.cid '课程id',course.cname '课程名称',SUM(CASE WHEN score.score>=85 AND score.score<=100 THEN 1 ELSE 0 END) '100~85',
SUM(CASE WHEN score.score>=70 AND score.score<85 THEN 1 ELSE 0 END) '85~70',SUM(CASE WHEN score.score>=60 AND score.score<70 THEN 1 ELSE 0 END) '70~60',
SUM(CASE WHEN score.score>0 AND score.score<60 THEN 1 ELSE 0 END) '60~0'
FROM course,score WHERE course.cid=score.cid GROUP BY course.cid;
9、查询每门课程被选修的学生数 SELECT course.cid,COUNT(score.cid)
FROM course,score
WHERE course.cid=score.cid GROUP BY course.cid;
10、查询出只选修了一门课程的学生的学号、姓名 SELECT student.sid '学号',student.sname '姓名'
FROM student,score
WHERE student.sid=score.sid GROUP BY student.sid HAVING COUNT(cid)=1;
11、查询男生、女生的总人数 (SELECT student.ssex '性别',COUNT(ssex)
FROM student WHERE ssex='男')
UNION
(SELECT student.ssex '性别',COUNT(ssex)
FROM student WHERE ssex='女');
12、姓李的师生名单 (SELECT sname FROM student where sname LIKE "李_%")
UNION
(SELECT tname FROM teacher where tname LIKE "李_%")
13、查询出同名同姓的学生名单,并统计人数 SELECT sname ,COUNT(sname)
FROM student
GROUP BY sname HAVING COUNT(*)>1;
14、查询每门课程的平均成绩,结果按平均成绩升序排列,如果平均成绩相同,就按课程号降序排列。 SELECT cid,AVG( score)
FROM score
GROUP BY cid ORDER BY AVG(score) ASC,cid DESC;
15、查询平均成绩大于85的所有的学生的学号、姓名、平均成绩 SELECT student.sid,student.sname,AVG( score)
FROM student,score
WHERE student.sid=score.sid GROUP BY student.sid HAVING AVG( score)>85;
16、查询课程名称为“离散数学”,且分数低于60分的学生姓名和分数 SELECT sname,score
FROM student,score,course
where student.sid=score.sid AND score.cid=course.cid AND cname="离散数学" HAVING score<60;
17、查询所有学生的选课情况:包括学号、课程号、姓名、课程名。 SELECT student.sid '学号',course.cid '课程号',sname '姓名',cname '课程名'
FROM student,course,score select * from teacher left JOIN course on teacher.tid=course.tid;
WHERE student.sid=score.sid AND score.cid=course.cid; 18、查询有学生不及格的课程的课程号和课程名,并按照课程号从大到小排列 SELECT course.cid '课程号',cname
FROM score,course
where course.cid=score.cid AND score<60 GROUP BY course.cid ORDER BY score.cid desc;
19、查询课程号为003且成绩在80分以上的学生的学号、姓名 SELECT student.sid '学号',sname
FROM student,score
WHERE student.sid=score.sid AND cid='003' AND score>80;
20、查询各个老师相应的学生总人数 SELECT course.tid,count(DISTINCT(sid))
FROM score,course
WHERE course.cid=score.cid GROUP BY course.tid;
21、查询不同课程成绩相同的学生的学号、课程号、学生成绩 SELECT a.sid,a.cid,a.score
FROM score a,score b
WHERE a.sid=b.sid AND a.score=b.score AND a.cid<>b.cid;
22、查询选“001”课程的所有学生的平均分(去掉一个最高分,去掉一个最低分) SELECT ((SUM(score)-MIN(score)-MAX(score))/(COUNT(score)-2)) '平均成绩'
FROM score
WHERE cid='001';
23、左连接版本 select * from teacher left JOIN course on teacher.tid=course.tid;
24、右连接版本 select *from course right JOIN teacher on teacher.tid=course.tid;

  

MySql查询语句的使用实例的更多相关文章

  1. MySQL查询语句执行过程及性能优化(JOIN/ORDER BY)-图

    http://blog.csdn.net/iefreer/article/details/12622097 MySQL查询语句执行过程及性能优化-查询过程及优化方法(JOIN/ORDER BY) 标签 ...

  2. MySQL查询语句执行过程及性能优化-基本概念和EXPLAIN语句简介

    网站或服务的性能关键点很大程度在于数据库的设计(假设你选择了合适的语言开发框架)以及如何查询数据上. 我们知道MySQL的性能优化方法,一般有建立索引.规避复杂联合查询.设置冗余字段.建立中间表.查询 ...

  3. MySQL查询语句执行过程及性能优化-查询过程及优化方法(JOIN/ORDER BY)

    在上一篇文章MySQL查询语句执行过程及性能优化-基本概念和EXPLAIN语句简介中介绍了EXPLAIN语句,并举了一个慢查询例子:

  4. mysql查询语句,通过limit来限制查询的行数。

    mysql查询语句,通过limit来限制查询的行数. 例如: select name from usertb where age > 20 limit 0, 1; //限制从第一条开始,显示1条 ...

  5. MYSQL查询语句大全集锦

    MYSQL查询语句大全集锦 1:使用SHOW语句找出在服务器上当前存在什么数据库: mysql> SHOW DATABASES; 2:2.创建一个数据库MYSQLDATA mysql> C ...

  6. mysql查询语句集

    1. mysql 查询出某字段的值不为空的语句 1.不为空 select * from table where id <> ""; select * from tabl ...

  7. [转]MySQL查询语句执行过程详解

    Mysql查询语句执行原理 数据库查询语句如何执行?语法分析:首先进行语法分析,对使用sql表示的查询进行语法分析,生成查询语法分析树.语义检查:检查sql中所涉及的对象以及是否在数据库中存在,用户是 ...

  8. Mysql查询语句中字符型字段不区分大小写解决方法

    项目中和前端联调的时候,发现Mysql查询语句中字符型字段值过滤是不区分大小写的,之前没有关注过这个设置,特意去网上看了下,原因是Mysql中“COLLATE”属性区分大小写,而该属性默认值为“utf ...

  9. php面试专题---MYSQL查询语句优化

    php面试专题---MYSQL查询语句优化 一.总结 一句话总结: mysql的性能优化包罗甚广: 索引优化,查询优化,查询缓存,服务器设置优化,操作系统和硬件优化,应用层面优化(web服务器,缓存) ...

随机推荐

  1. Arthur and Table CodeForces - 557C

    Arthur and Table CodeForces - 557C 首先,按长度排序. 长度为p的桌腿有a[p]个. 要使得长度为p的桌腿为最长,那么要按照代价从小到大砍掉sum{长度不到p的腿的数 ...

  2. Contextual Action bar(3) 两个示例

    一.通过activity启动Context Action Bar 1.主java public class ActivityActionModeFrgmt extends Fragment imple ...

  3. 浅析 Spark Shuffle 内存使用

    在使用 Spark 进行计算时,我们经常会碰到作业 (Job) Out Of Memory(OOM) 的情况,而且很大一部分情况是发生在 Shuffle 阶段.那么在 Spark Shuffle 中具 ...

  4. 远程访问rhel7的oracle中的问题

    客户端得到的错误信息通常是:ORA-12170: TNS:连接超时 这时,我们基本可以肯定是服务器没有开放1521端口(假设你用默认设置) 解决方法: (1)假如你是在一个局域网环境,配置了防火墙.那 ...

  5. laravel oauth2.0 文件上传报错

    报错信息:   "message": "Invalid stream or file provided for UploadedFile",    " ...

  6. client系列、offset系列、scroll系列

    一.client系列 clientWidth/clientHeight    是我们设置的宽和高加上内边距(没有边框) clientLeft/clientTop 就是我们设置的边框值 二.offset ...

  7. elasticsearch 2.4在head删除数据(使用Delete By Query插件)

    之所以说明是2.4版,是因为不同版本删除的语法不一样(例如跟5.x就不同) 首先安装Delete By Query插件,方式跟安装head插件差不多,安装命令:plugin install delet ...

  8. .htaccess重写规则失败

    开启mod_rewrite.so LoadModule rewrite_module libexec/apache2/mod_rewrite.so 重启服务 sudo apachectl restar ...

  9. 正确使用MySQL JDBC setFetchSize()方法解决JDBC处理大结果集 java.lang.OutOfMemoryError: Java heap space

    昨天在项目中需要对日志的查询结果进行导出功能. 日志导出功能的实现是这样的,输入查询条件,然后对查询结果进行导出.由于日志数据量比较大.多的时候,有上亿条记录. 之前的解决方案都是多次查询,然后使用l ...

  10. Linux/Windows 实用工具简记

    以下只是开发中可能用的比较多的工具,另外还有其他很多未曾提及的实用工具.Linux篇: 1.链接过程的调试:主要用于查看构建过程:如链接时加载的动态库以及运行时加载动态库过程的调试 支持LD_DEBU ...