创建表

/*
Navicat MySQL Data Transfer Source Server : localhost_3306
Source Server Version : 50719
Source Host : localhost:3306
Source Database : oldbo Target Server Type : MYSQL
Target Server Version : 50719
File Encoding : 65001 Date: 2017-07-26 15:46:16
*/ SET FOREIGN_KEY_CHECKS=0; -- ----------------------------
-- Table structure for class
-- ----------------------------
DROP TABLE IF EXISTS `class`;
CREATE TABLE `class` (
`cid` int(11) NOT NULL AUTO_INCREMENT,
`caption` varchar(32) NOT NULL,
PRIMARY KEY (`cid`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8; -- ----------------------------
-- Records of class
-- ----------------------------
INSERT INTO `class` VALUES ('', '三年二班');
INSERT INTO `class` VALUES ('', '三年三班');
INSERT INTO `class` VALUES ('', '一年二班');
INSERT INTO `class` VALUES ('', '二年九班'); -- ----------------------------
-- Table structure for course
-- ----------------------------
DROP TABLE IF EXISTS `course`;
CREATE TABLE `course` (
`cid` int(11) NOT NULL AUTO_INCREMENT,
`cname` varchar(32) NOT NULL,
`teacher_id` int(11) NOT NULL,
PRIMARY KEY (`cid`),
KEY `fk_course_teacher` (`teacher_id`),
CONSTRAINT `fk_course_teacher` FOREIGN KEY (`teacher_id`) REFERENCES `teacher` (`tid`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8; -- ----------------------------
-- Records of course
-- ----------------------------
INSERT INTO `course` VALUES ('', '生物', '');
INSERT INTO `course` VALUES ('', '物理', '');
INSERT INTO `course` VALUES ('', '体育', '');
INSERT INTO `course` VALUES ('', '美术', ''); -- ----------------------------
-- Table structure for score
-- ----------------------------
DROP TABLE IF EXISTS `score`;
CREATE TABLE `score` (
`sid` int(11) NOT NULL AUTO_INCREMENT,
`student_id` int(11) NOT NULL,
`course_id` int(11) NOT NULL,
`num` int(11) NOT NULL,
PRIMARY KEY (`sid`),
KEY `fk_score_student` (`student_id`),
KEY `fk_score_course` (`course_id`),
CONSTRAINT `fk_score_course` FOREIGN KEY (`course_id`) REFERENCES `course` (`cid`),
CONSTRAINT `fk_score_student` FOREIGN KEY (`student_id`) REFERENCES `student` (`sid`)
) ENGINE=InnoDB AUTO_INCREMENT=53 DEFAULT CHARSET=utf8; -- ----------------------------
-- Records of score
-- ----------------------------
INSERT INTO `score` VALUES ('', '', '', '');
INSERT INTO `score` VALUES ('', '', '', '');
INSERT INTO `score` VALUES ('', '', '', '');
INSERT INTO `score` VALUES ('', '', '', '');
INSERT INTO `score` VALUES ('', '', '', '');
INSERT INTO `score` VALUES ('', '', '', '');
INSERT INTO `score` VALUES ('', '', '', '');
INSERT INTO `score` VALUES ('', '', '', '');
INSERT INTO `score` VALUES ('', '', '', '');
INSERT INTO `score` VALUES ('', '', '', '');
INSERT INTO `score` VALUES ('', '', '', '');
INSERT INTO `score` VALUES ('', '', '', '');
INSERT INTO `score` VALUES ('', '', '', '');
INSERT INTO `score` VALUES ('', '', '', '');
INSERT INTO `score` VALUES ('', '', '', '');
INSERT INTO `score` VALUES ('', '', '', '');
INSERT INTO `score` VALUES ('', '', '', '');
INSERT INTO `score` VALUES ('', '', '', '');
INSERT INTO `score` VALUES ('', '', '', '');
INSERT INTO `score` VALUES ('', '', '', '');
INSERT INTO `score` VALUES ('', '', '', '');
INSERT INTO `score` VALUES ('', '', '', '');
INSERT INTO `score` VALUES ('', '', '', '');
INSERT INTO `score` VALUES ('', '', '', '');
INSERT INTO `score` VALUES ('', '', '', '');
INSERT INTO `score` VALUES ('', '', '', '');
INSERT INTO `score` VALUES ('', '', '', '');
INSERT INTO `score` VALUES ('', '', '', '');
INSERT INTO `score` VALUES ('', '', '', '');
INSERT INTO `score` VALUES ('', '', '', '');
INSERT INTO `score` VALUES ('', '', '', '');
INSERT INTO `score` VALUES ('', '', '', '');
INSERT INTO `score` VALUES ('', '', '', '');
INSERT INTO `score` VALUES ('', '', '', '');
INSERT INTO `score` VALUES ('', '', '', '');
INSERT INTO `score` VALUES ('', '', '', '');
INSERT INTO `score` VALUES ('', '', '', '');
INSERT INTO `score` VALUES ('', '', '', '');
INSERT INTO `score` VALUES ('', '', '', '');
INSERT INTO `score` VALUES ('', '', '', '');
INSERT INTO `score` VALUES ('', '', '', '');
INSERT INTO `score` VALUES ('', '', '', '');
INSERT INTO `score` VALUES ('', '', '', '');
INSERT INTO `score` VALUES ('', '', '', '');
INSERT INTO `score` VALUES ('', '', '', '');
INSERT INTO `score` VALUES ('', '', '', '');
INSERT INTO `score` VALUES ('', '', '', ''); -- ----------------------------
-- Table structure for student
-- ----------------------------
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student` (
`sid` int(11) NOT NULL AUTO_INCREMENT,
`gender` char(1) NOT NULL,
`class_id` int(11) NOT NULL,
`sname` varchar(32) NOT NULL,
PRIMARY KEY (`sid`),
KEY `fk_class` (`class_id`),
CONSTRAINT `fk_class` FOREIGN KEY (`class_id`) REFERENCES `class` (`cid`)
) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=utf8; -- ----------------------------
-- Records of student
-- ----------------------------
INSERT INTO `student` VALUES ('', '男', '', '理解');
INSERT INTO `student` VALUES ('', '女', '', '钢蛋');
INSERT INTO `student` VALUES ('', '男', '', '张三');
INSERT INTO `student` VALUES ('', '男', '', '张一');
INSERT INTO `student` VALUES ('', '女', '', '张二');
INSERT INTO `student` VALUES ('', '男', '', '张四');
INSERT INTO `student` VALUES ('', '女', '', '铁锤');
INSERT INTO `student` VALUES ('', '男', '', '李三');
INSERT INTO `student` VALUES ('', '男', '', '李一');
INSERT INTO `student` VALUES ('', '女', '', '李二');
INSERT INTO `student` VALUES ('', '男', '', '李四');
INSERT INTO `student` VALUES ('', '女', '', '如花');
INSERT INTO `student` VALUES ('', '男', '', '刘三');
INSERT INTO `student` VALUES ('', '男', '', '刘一');
INSERT INTO `student` VALUES ('', '女', '', '刘二');
INSERT INTO `student` VALUES ('', '男', '', '刘四'); -- ----------------------------
-- Table structure for teacher
-- ----------------------------
DROP TABLE IF EXISTS `teacher`;
CREATE TABLE `teacher` (
`tid` int(11) NOT NULL AUTO_INCREMENT,
`tname` varchar(32) NOT NULL,
PRIMARY KEY (`tid`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8; -- ----------------------------
-- Records of teacher
-- ----------------------------
INSERT INTO `teacher` VALUES ('', '张磊老师');
INSERT INTO `teacher` VALUES ('', '李平老师');
INSERT INTO `teacher` VALUES ('', '刘海燕老师');
INSERT INTO `teacher` VALUES ('', '朱云海老师');
INSERT INTO `teacher` VALUES ('', '李杰老师');
SET FOREIGN_KEY_CHECKS=1;

1、将所有的课程的名称以及对应的任课老师姓名打印出来,如下:

mysql> SELECT cname,tname FROM course LEFT JOIN teacher ON course.`teacher_id`=teacher.`tid`;
+--------+-----------------+
| cname | tname |
+--------+-----------------+
| 生物 | 张磊老师 |
| 物理 | 李平老师 |
| 体育 | 刘海燕老师 |
| 美术 | 李平老师 |
+--------+-----------------+
4 rows in set (0.00 sec)

  

2、查询学生表中男女生各有多少人? 如下:

mysql> SELECT gender,COUNT(sid) FROM student GROUP BY gender;
+--------+------------+
| gender | COUNT(sid) |
+--------+------------+
| 女 | 6 |
| 男 | 10 |
+--------+------------+
2 rows in set (0.00 sec)

  

3、查询物理成绩等于100的学生的姓名?如下:

mysql> SELECT sname FROM student WHERE sid IN(SELECT student_id FROM score WHERE course_id=2 AND num=100);
+--------+
| sname |
+--------+
| 张四 |
| 铁锤 |
| 李三 |
+--------+
3 rows in set (0.00 sec)

  

4、查询平均成绩大于八十分的同学的姓名和平均成绩,如下:

mysql> SELECT sname AS '姓名',avgnum AS '平均分' FROM student INNER JOIN (SELECT student_id,AVG(num)AS avgnum FROM score GROUP BY student_id HAVING AVG(num)>80)AS id_avgnum ON student.`sid`=id_avgnum.student_id;
+--------+-----------+
| 姓名 | 平均分 |
+--------+-----------+
| 张三 | 82.2500 |
| 刘三 | 87.0000 |
+--------+-----------+
2 rows in set (0.00 sec) mysql> SELECT sname,AVG(num) FROM student INNER JOIN score ON student.`sid`=score.`student_id` GROUP BY student_id HAVING AVG(num)>80;
+--------+----------+
| sname | AVG(num) |
+--------+----------+
| 张三 | 82.2500 |
| 刘三 | 87.0000 |
+--------+----------+
2 rows in set (0.01 sec)

  

5、查询所有学生的学号,姓名,选课数,总成绩

mysql> SELECT student.sid,sname,SUM(num),COUNT(course_id) FROM student INNER JOIN score ON student.`sid`=score.`student_id` GROUP BY student_id;
+-----+--------+----------+------------------+
| sid | sname | SUM(num) | COUNT(course_id) |
+-----+--------+----------+------------------+
| 1 | 理解 | 85 | 3 |
| 2 | 钢蛋 | 175 | 3 |
| 3 | 张三 | 329 | 4 |
| 4 | 张一 | 257 | 4 |
| 5 | 张二 | 257 | 4 |
| 6 | 张四 | 276 | 4 |
| 7 | 铁锤 | 264 | 4 |
| 8 | 李三 | 264 | 4 |
| 9 | 李一 | 268 | 4 |
| 10 | 李二 | 297 | 4 |
| 11 | 李四 | 297 | 4 |
| 12 | 如花 | 297 | 4 |
| 13 | 刘三 | 87 | 1 |
+-----+--------+----------+------------------+
13 rows in set (0.00 sec)

6、查询姓李老师的个数

mysql> SELECT COUNT(tid) FROM teacher WHERE tname LIKE '李%';
+------------+
| COUNT(tid) |
+------------+
| 2 |
+------------+
1 row in set (0.00 sec)

  

7、查询没有报李平老师课的学生姓名

mysql> SELECT sname FROM student WHERE sid NOT IN(SELECT student_id FROM score WHERE course_id IN(SELECT cid FROM course WHERE teacher_id=(SELECT tid FROM teacher WHERE tname='李平老师')));
+--------+
| sname |
+--------+
| 刘三 |
| 刘一 |
| 刘二 |
| 刘四 |
+--------+
4 rows in set (0.00 sec)

8、查询物理课程比生物课程高的学生的学号

SELECT A.student_id,A.num,b.num FROM

(SELECT * FROM score WHERE course_id=(SELECT cid FROM course WHERE cname="物理"))as A

INNER JOIN

(SELECT * FROM score WHERE course_id=(SELECT cid FROM course WHERE cname="生物"))as B

ON
A.student_id=B.student_id WHERE A.num>B.num

  

9、查询没有同时选修物理课程和体育课程的学生姓名

SELECT sname FROM student WHERE sid NOT in (SELECT student_id FROM score
WHERE course_id in (SELECT cid FROM course WHERE cname="物理" OR cname="体育") GROUP BY student_id HAVING COUNT(sid)=2)

  

10、查询挂科超过两门(包括两门)的学生姓名和班级

SELECT sname,caption FROM student LEFT JOIN class ON student.class_id=class.cid
where sid in (SELECT student_id FROM score WHERE num<60
GROUP BY student_id HAVING COUNT(sid)>1)

  

11 、查询选修了所有课程的学生姓名

SELECT sname FROM student WHERE sid in (SELECT student_id FROM score

GROUP BY student_id HAVING COUNT(sid)!=(SELECT COUNT(cid) FROM course))

  

12、查询李平老师教的课程的所有成绩记录

SELECT * FROM score WHERE course_id in (SELECT cid FROM course LEFT JOIN teacher ON teacher.tid=course.teacher_id
WHERE tname="李平老师")

13、查询全部学生都选修了的课程号和课程名

14、查询每门课程被选修的次数

mysql> SELECT course.cname,COUNT(score.course_id) FROM course INNER JOIN score ON course.cid=score.course_id GROUP BY score.course_id;
+--------+------------------------+
| cname | COUNT(score.course_id) |
+--------+------------------------+
| 生物 | 12 |
| 物理 | 11 |
| 体育 | 12 |
| 美术 | 12 |
+--------+------------------------+
4 rows in set (0.00 sec)

  

15、查询之选修了一门课程的学生姓名和学号

mysql> SELECT student_id,student.sname,COUNT(course_id) FROM student INNER JOIN score ON student.`sid`=score.`student_id` GROUP BY student_id HAVING COUNT(course_id)=1;
+------------+--------+------------------+
| student_id | sname | COUNT(course_id) |
+------------+--------+------------------+
| 13 | 刘三 | 1 |
+------------+--------+------------------+
1 row in set (0.00 sec)

16、查询所有学生考出的成绩并按从高到低排序(成绩去重)

mysql> select distinct num from score order by num desc;
+-----+
| num |
+-----+
| 100 |
| 99 |
| 91 |
| 90 |
| 88 |
| 87 |
| 79 |
| 77 |
| 68 |
| 67 |
| 66 |
| 43 |
| 22 |
| 11 |
| 10 |
| 9 |
| 8 |
+-----+
17 rows in set (0.00 sec)

  

17、查询平均成绩大于85的学生姓名和平均成绩

mysql> SELECT sname,AVG(num) FROM student INNER JOIN score ON student.`sid`=score.`student_id` GROUP BY student_id HAVING AVG(num)>85;
+--------+----------+
| sname | AVG(num) |
+--------+----------+
| 刘三 | 87.0000 |
+--------+----------+
1 row in set (0.00 sec)

18、查询生物成绩不及格的学生姓名和对应生物分数

mysql> SELECT student.`sname`,A.num FROM student INNER JOIN (SELECT student_id,num FROM score WHERE num<60 AND course_id=(SELECT cid FROM course WHERE cname='生物'))AS A ON student.sid=A.student_id;
+--------+-----+
| sname | num |
+--------+-----+
| 理解 | 10 |
| 钢蛋 | 8 |
| 张四 | 9 |
| 铁锤 | 9 |
| 李三 | 9 |
+--------+-----+
5 rows in set (0.00 sec)

  

19、查询在所有选修了李平老师课程的学生中,这些课程(李平老师的课程,不是所有课程)平均成绩最高的学生姓名

mysql> SELECT sname FROM student INNER JOIN (SELECT student_id,SUM(num) FROM (SELECT * FROM score WHERE course_id IN(SELECT cid FROM course WHERE teacher_id=(SELECT tid FROM teacher WHERE tname='李平老师')))AS aa GROUP BY student_id DESC LIMIT 1)AS bb ON student.sid=bb.student_id;
+--------+
| sname |
+--------+
| 如花 |
+--------+
1 row in set (0.00 sec)

20、查询每门课程成绩最好的前两名学生姓名(答案非准确)

mysql> SELECT student.`sname`,ee.course_id,ee.num FROM student INNER JOIN
-> (SELECT * FROM (SELECT student_id,course_id,num FROM score WHERE course_id=1 ORDER BY num DESC LIMIT 2)AS aa
-> UNION ALL SELECT * FROM (SELECT student_id,course_id,num FROM score WHERE course_id=2 ORDER BY num DESC LIMIT 2)AS bb
-> UNION ALL SELECT * FROM (SELECT student_id,course_id,num FROM score WHERE course_id=3 ORDER BY num DESC LIMIT 2)AS cc
-> UNION ALL SELECT * FROM (SELECT student_id,course_id,num FROM score WHERE course_id=4 ORDER BY num DESC LIMIT 2)AS dd)AS ee
-> ON student.sid=ee.student_id;
+--------+-----------+-----+
| sname | course_id | num |
+--------+-----------+-----+
| 李一 | 1 | 91 |
| 如花 | 1 | 90 |
| 张四 | 2 | 100 |
| 铁锤 | 2 | 100 |
| 张三 | 3 | 87 |
| 刘三 | 3 | 87 |
| 张一 | 4 | 100 |
| 张二 | 4 | 100 |
+--------+-----------+-----+
8 rows in set (0.01 sec)

  

MySQL 查询语句练习2的更多相关文章

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

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

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

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

  3. MYSQL查询语句大全集锦

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

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

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

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

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

  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服务器,缓存) ...

  10. Mysql查询语句执行过程

    Mysql查询语句执行过程   Mysql分为server层和存储引擎两部分,或许可以再加一层连接层   连接层(器) Mysql使用的是典型的C/S架构.连接器通过典型的TCP握手完成连接. 需要注 ...

随机推荐

  1. Qt 报错LINK2019:无法解析的外部符号

    这里用的都是Qt 自己的东西,但是还是抱错,所以怀疑是没有包含进去,尝试了清理项目,重新编译等,还是不行 用到一个最好的办法,就是把构建的文件夹整个删除,在重新编译就可以了 如图所示,把debug和r ...

  2. 第十二篇 Python函数之全局变量&局部变量&递归函数

    全局变量:在定义的时候,顶头写的,没有任何缩进的变量就是全局变量. 全局变量的特点:在当前文件里的任何地方都可以进行调用 局部变量:在子程序里定义的变量,就是局部变量. 子程序:比如.py文件里,写的 ...

  3. lua敏感词过滤

    --过滤敏感词(如果onlyKnowHas为true,表示只想知道是否存在敏感词,不会返回过滤后的敏感词,比如用户注册的时候,我们程序是只想知道用户取的姓名是否包含敏感词的(这样也能提高效率,检测到有 ...

  4. 梳理 Opengl ES 3.0 (五)shader运行原理

    先来看看一张图 shader都是在运行时编译和执行的,每个shader都有一个main函数作为它的入口. vertex shader的功能有两个:一个是计算顶点坐标变换,另一个就是为片元shader计 ...

  5. mysql初识(5)

    将mysql数据库内的表导出为execel格式文件: 方法1:mysql命令:select * into outfile '/tmp/test.xls' from table_name;(需要注意的是 ...

  6. SSH答疑解惑系列(三)——Struts2的异常处理

    Struts2的异常采用声明式异常捕捉,具体通过拦截器来实现. 在项目中,我们可以在Action中直接抛出异常,剩下的就交给Struts2的拦截器来处理了.当然,我们需要进行相关配置. Struts2 ...

  7. WCF身份验证二:基于消息安全模式的自定义身份验证

    使用X509证书进行身份验证应该说是WCF安全模型中最”正常”的做法, 因为WCF强制要求使用证书加密身份数据, 离开了证书, 所有的身份验证机制拒绝工作, WCF支持的身份验证机制也相当复杂, 这里 ...

  8. php 文件上传失败

    使用OSX系统,在使用MAMP Pro作为虚拟服务器,并使用PHP作为后端语言进行文件上传,从临时文件夹拷贝文件的方法为 move_uploaded_file 代码如下: if($_FILES['fi ...

  9. JavaScript十大经典排序算法

    排序算法说明 (1)排序的定义:对一序列对象根据某个关键字进行排序: 输入:n个数:a1,a2,a3,…,an输出:n个数的排列:a1’,a2’,a3’,…,an’,使得a1’ 再讲的形象点就是排排坐 ...

  10. ListView获取网络数据并展示优化练习

    权限: <uses-permission android:name="android.permission.INTERNET"></uses-permission ...