MySQL 查询语句练习2
创建表
/*
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的更多相关文章
- MySQL查询语句执行过程及性能优化(JOIN/ORDER BY)-图
http://blog.csdn.net/iefreer/article/details/12622097 MySQL查询语句执行过程及性能优化-查询过程及优化方法(JOIN/ORDER BY) 标签 ...
- 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查询语句执行过程及性能优化-基本概念和EXPLAIN语句简介
网站或服务的性能关键点很大程度在于数据库的设计(假设你选择了合适的语言开发框架)以及如何查询数据上. 我们知道MySQL的性能优化方法,一般有建立索引.规避复杂联合查询.设置冗余字段.建立中间表.查询 ...
- MySQL查询语句执行过程及性能优化-查询过程及优化方法(JOIN/ORDER BY)
在上一篇文章MySQL查询语句执行过程及性能优化-基本概念和EXPLAIN语句简介中介绍了EXPLAIN语句,并举了一个慢查询例子:
- 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服务器,缓存) ...
- Mysql查询语句执行过程
Mysql查询语句执行过程 Mysql分为server层和存储引擎两部分,或许可以再加一层连接层 连接层(器) Mysql使用的是典型的C/S架构.连接器通过典型的TCP握手完成连接. 需要注 ...
随机推荐
- SVN脱离锁定的几种方法
SVN经常出现被锁定而无法提交的问题,选择解锁又提示没有文件被锁定,很是头疼.这里整理了一下SVN 被锁定的几种解决方法: 1.出现这个问题后使用“清理”即"Clean up"功能 ...
- 51单片机实现外部中断00H-FFH、000-255、0000-1023
外部中断00H-FFH #include< reg51.h> #define uint unsigned int #define uchar unsigned char sfr P0M0 ...
- 树莓派的WIFI配置
参考网址: http://www.cnblogs.com/iusmile/archive/2013/03/30/2991139.html http://my.oschina.net/pikeman/b ...
- kafka常用命令笔记
0.查看有哪些主题: ./kafka-topics.sh --list --zookeeper 192.168.0.201:12181 1.查看topic的详细信息 ./kafka-topics.sh ...
- 以太坊solidity编程常见错误(不定期更新)
1.报错: Expected token Semicolon got 'eth_compileSolidity' funtion setFunder(uint _u,uint _amount){ 解决 ...
- winform 端口serialport简用
最近的一个小项目中需要从串口读取摄像机的应答指令,因此在程序中用到了SerialPort控件(使用SerialPort类也可以). 在SerialPort控件的属性列表中主要注意3个地方: (1)Po ...
- 【WebService】——阶段小结
[概念] WebService集中解决了远程调用.跨平台和跨语言的问题.如下图中,A应用与B应用之间的相互调用不再局限于平台(Linux或Windows).语言(Java和C#). [与xml] 提到 ...
- Java基础——集合
java的集合类是一个工具类,存放在java.util包中.它不仅可以存储对象,也可以实现常用数据结构,如栈.队列等.严格的说,集合类存放的是对象的引用,而不是对象本身. java集合主要由这两个接口 ...
- Redis能做什么?不能做什么?
https://blog.csdn.net/u014229282/article/details/81174202 最近阅读了<redis设计与实现>,这是一本比较枯燥的书,毕竟涉及到re ...
- Delphi函数详解:全局函数,内部函数,类的成员函数,类的静态方法
1. Delphi中的全局函数 //要点: 需要给其他单元调用, 必须在 interface 声明, 但必须在 uses 区后面 unit Unit1; interface uses Window ...