MySql查询语句的使用实例
一、设计表
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查询语句的使用实例的更多相关文章
- MySQL查询语句执行过程及性能优化(JOIN/ORDER BY)-图
http://blog.csdn.net/iefreer/article/details/12622097 MySQL查询语句执行过程及性能优化-查询过程及优化方法(JOIN/ORDER BY) 标签 ...
- MySQL查询语句执行过程及性能优化-基本概念和EXPLAIN语句简介
网站或服务的性能关键点很大程度在于数据库的设计(假设你选择了合适的语言开发框架)以及如何查询数据上. 我们知道MySQL的性能优化方法,一般有建立索引.规避复杂联合查询.设置冗余字段.建立中间表.查询 ...
- MySQL查询语句执行过程及性能优化-查询过程及优化方法(JOIN/ORDER BY)
在上一篇文章MySQL查询语句执行过程及性能优化-基本概念和EXPLAIN语句简介中介绍了EXPLAIN语句,并举了一个慢查询例子:
- mysql查询语句,通过limit来限制查询的行数。
mysql查询语句,通过limit来限制查询的行数. 例如: select name from usertb where age > 20 limit 0, 1; //限制从第一条开始,显示1条 ...
- MYSQL查询语句大全集锦
MYSQL查询语句大全集锦 1:使用SHOW语句找出在服务器上当前存在什么数据库: mysql> SHOW DATABASES; 2:2.创建一个数据库MYSQLDATA mysql> C ...
- mysql查询语句集
1. mysql 查询出某字段的值不为空的语句 1.不为空 select * from table where id <> ""; select * from tabl ...
- [转]MySQL查询语句执行过程详解
Mysql查询语句执行原理 数据库查询语句如何执行?语法分析:首先进行语法分析,对使用sql表示的查询进行语法分析,生成查询语法分析树.语义检查:检查sql中所涉及的对象以及是否在数据库中存在,用户是 ...
- Mysql查询语句中字符型字段不区分大小写解决方法
项目中和前端联调的时候,发现Mysql查询语句中字符型字段值过滤是不区分大小写的,之前没有关注过这个设置,特意去网上看了下,原因是Mysql中“COLLATE”属性区分大小写,而该属性默认值为“utf ...
- php面试专题---MYSQL查询语句优化
php面试专题---MYSQL查询语句优化 一.总结 一句话总结: mysql的性能优化包罗甚广: 索引优化,查询优化,查询缓存,服务器设置优化,操作系统和硬件优化,应用层面优化(web服务器,缓存) ...
随机推荐
- ui自动化测试的意义与理解
分层测试的思想 分层测试(有的也叫测试金字塔)是最近几年慢慢流行.火热起来的,也逐渐得到了大家的认可,大家应该已经比较熟悉分层测试的思想了,不太了解的可以自行找一些相应的渠道去补充一下上下文的知识. ...
- 128 Longest Consecutive Sequence 一个无序整数数组中找到最长连续序列
给定一个未排序的整数数组,找出最长连续序列的长度.例如,给出 [100, 4, 200, 1, 3, 2],这个最长的连续序列是 [1, 2, 3, 4].返回所求长度: 4.要求你的算法复杂度为 O ...
- 迭代器模式及php实现
迭代器模式: 迭代器模式是遍历集合的成熟模式,迭代器模式的关键是将遍历集合的任务交给一个叫做迭代器的对象,它的工作时遍历并选择序列中的对象,而客户端程序员不必知道或关心该集合序列底层的结构. 角色: ...
- spark性能优化-JVM虚拟机垃圾回收调优
1 2 3 4
- 实战角度比较EJB2和EJB3的架构异同
] EJB编程模型的简化 首先,EJB3简化的一个主要表现是:在EJB3中,一个EJB不再象EJB2中需要两个接口一个Bean实现类,虽然我们以前使用JBuilder这样可视化开发工具自动生成了EJB ...
- JAVA之NIO按行读取大文件
做项目过程中遇到要解析100多M的TXT文件,并入库.用之前的FileInputStream.BufferedReader显然不行了,虽然readLine这方法可以直接按行读取,但是去读一个140M左 ...
- 为sublime Text3 安装插件JS Format
1. 安装package control 菜单 View - Show Console 或者 ctrl + ~ 快捷键,调出 console.将以下 Python 代码粘贴进去并 enter 执行,不 ...
- SQLite – GLOB子句
SQLite – GLOB子句 .与LIKE不同,GLOB是大小写敏感的,它遵循语法的UNIX指定以下通配符. The asterisk sign (*) The question mark (?) ...
- Android(java)学习笔记176: 远程服务的应用场景(移动支付案例)
一. 移动支付: 用户需要在移动终端提交账号.密码以及金额等数据 到 远端服务器.然后远端服务器匹配这些信息,进行逻辑判断,进而完成交易,返回交易成功或失败的信息给移动终端.用户提交账号. ...
- 递推(三):POJ中的三道递推例题POJ 1664、POJ 2247和POJ 1338
[例9]放苹果(POJ 1664) Description 把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法. In ...