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握手完成连接. 需要注 ...
随机推荐
- C#的内存管理
栈的填充方式是从高到低,高数位到低数位的填充 堆的填充方式是从低向高,低数位到高数位的填充 内存堆上没有被栈引用的东西,才会被垃圾回收器回收. GC垃圾自动回收会重新排列堆里面的内存占用,自动回收运行 ...
- Python 3基础教程32-正则
本文介绍Python的正则,通过本文介绍和一个练习,对正则有一个基本了解就可以. # 正则表达式 ''' 正则表达式是有一些特殊字符组成,能够帮你找到一些符合一定规则的字符串 先来了解几个符号所代表的 ...
- poj1094拓扑排序
Sorting It All Out Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 29539 Accepted: 10 ...
- Java集合(2)——深入理解ArrayList、Vector和LinkedList
回顾 Java集合主要分为两个体系结构,Collection和Map.这篇博客主要介绍Collection子接口List下的三个经常使用的实现类:ArrayList.Vector和LinkedList ...
- [LeetCode] 65. Valid Number(多个标志位)
[思路]该题题干不是很明确,只能根据用例来理解什么样的字符串才是符合题意的,本题关键在于几个标志位的设立,将字符串分为几个部分,代码如下: class Solution { public: strin ...
- ES 1.7安装ik分词elasticsearch-analysis-ik-1.2.5中文同义词实现
ElasticSearch 中文同义词实现 https://blog.csdn.net/xsdxs/article/details/52806499 参考以下两个网址,但运行报错,以下是我自己改进方式 ...
- 前端工程师必须要知道的SEO技巧(2):制作比设计还要漂亮的代码(内容和语义化代码)实现下
提醒自己:上一篇文章属于纯理论的文章,我自己有的部分之从网上摘抄的,我自己也是不理解的.或许过一段日子我就能全明白了.我自己还是喜欢实战,做几个例子就明白了. 怎么做让自己网页的标签来实现语义化,我直 ...
- BZOJ5109 CodePlus 2017大吉大利,晚上吃鸡!(最短路+拓扑排序+bitset)
首先跑正反两遍dij求由起点/终点到某点的最短路条数,这样条件一就转化为f(S,A)*f(T,A)+f(S,B)*f(T,B)=f(S,T).同时建出最短路DAG,这样图中任何一条S到T的路径都是最短 ...
- [Leetcode] Linked list cycle 判断链表是否有环
Given a linked list, determine if it has a cycle in it. Follow up:Can you solve it without using ext ...
- 停课day2
感觉今天好颓啊,我才把昨晚那五道题a了,(但我明明一直在学啊,为啥这么慢,难道是我太笨了?) 闲话少叙,先说做法 问题 A: C Looooops 题目描述 对于C的for(i=A ; i!=B ;i ...