MySQL练习题
Posted 敏而好学,不耻下问。
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL练习题相关的知识,希望对你有一定的参考价值。
一、表关系
二、操作表
1、自行创建测试数据;
/* Navicat Premium Data Transfer Source Server : localhost Source Server Type : mysql Source Server Version : 50624 Source Host : localhost Source Database : sqlexam Target Server Type : MySQL Target Server Version : 50624 File Encoding : utf-8 Date: 10/21/2016 06:46:46 AM */ SET NAMES utf8; 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` -- ---------------------------- BEGIN; INSERT INTO `class` VALUES (\'1\', \'三年二班\'), (\'2\', \'三年三班\'), (\'3\', \'一年二班\'), (\'4\', \'二年九班\'); COMMIT; -- ---------------------------- -- 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` -- ---------------------------- BEGIN; INSERT INTO `course` VALUES (\'1\', \'生物\', \'1\'), (\'2\', \'物理\', \'2\'), (\'3\', \'体育\', \'3\'), (\'4\', \'美术\', \'2\'); COMMIT; -- ---------------------------- -- 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` -- ---------------------------- BEGIN; INSERT INTO `score` VALUES (\'1\', \'1\', \'1\', \'10\'), (\'2\', \'1\', \'2\', \'9\'), (\'5\', \'1\', \'4\', \'66\'), (\'6\', \'2\', \'1\', \'8\'), (\'8\', \'2\', \'3\', \'68\'), (\'9\', \'2\', \'4\', \'99\'), (\'10\', \'3\', \'1\', \'77\'), (\'11\', \'3\', \'2\', \'66\'), (\'12\', \'3\', \'3\', \'87\'), (\'13\', \'3\', \'4\', \'99\'), (\'14\', \'4\', \'1\', \'79\'), (\'15\', \'4\', \'2\', \'11\'), (\'16\', \'4\', \'3\', \'67\'), (\'17\', \'4\', \'4\', \'100\'), (\'18\', \'5\', \'1\', \'79\'), (\'19\', \'5\', \'2\', \'11\'), (\'20\', \'5\', \'3\', \'67\'), (\'21\', \'5\', \'4\', \'100\'), (\'22\', \'6\', \'1\', \'9\'), (\'23\', \'6\', \'2\', \'100\'), (\'24\', \'6\', \'3\', \'67\'), (\'25\', \'6\', \'4\', \'100\'), (\'26\', \'7\', \'1\', \'9\'), (\'27\', \'7\', \'2\', \'100\'), (\'28\', \'7\', \'3\', \'67\'), (\'29\', \'7\', \'4\', \'88\'), (\'30\', \'8\', \'1\', \'9\'), (\'31\', \'8\', \'2\', \'100\'), (\'32\', \'8\', \'3\', \'67\'), (\'33\', \'8\', \'4\', \'88\'), (\'34\', \'9\', \'1\', \'91\'), (\'35\', \'9\', \'2\', \'88\'), (\'36\', \'9\', \'3\', \'67\'), (\'37\', \'9\', \'4\', \'22\'), (\'38\', \'10\', \'1\', \'90\'), (\'39\', \'10\', \'2\', \'77\'), (\'40\', \'10\', \'3\', \'43\'), (\'41\', \'10\', \'4\', \'87\'), (\'42\', \'11\', \'1\', \'90\'), (\'43\', \'11\', \'2\', \'77\'), (\'44\', \'11\', \'3\', \'43\'), (\'45\', \'11\', \'4\', \'87\'), (\'46\', \'12\', \'1\', \'90\'), (\'47\', \'12\', \'2\', \'77\'), (\'48\', \'12\', \'3\', \'43\'), (\'49\', \'12\', \'4\', \'87\'), (\'52\', \'13\', \'3\', \'87\'); COMMIT; -- ---------------------------- -- 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` -- ---------------------------- BEGIN; INSERT INTO `student` VALUES (\'1\', \'男\', \'1\', \'理解\'), (\'2\', \'女\', \'1\', \'钢蛋\'), (\'3\', \'男\', \'1\', \'张三\'), (\'4\', \'男\', \'1\', \'张一\'), (\'5\', \'女\', \'1\', \'张二\'), (\'6\', \'男\', \'1\', \'张四\'), (\'7\', \'女\', \'2\', \'铁锤\'), (\'8\', \'男\', \'2\', \'李三\'), (\'9\', \'男\', \'2\', \'李一\'), (\'10\', \'女\', \'2\', \'李二\'), (\'11\', \'男\', \'2\', \'李四\'), (\'12\', \'女\', \'3\', \'如花\'), (\'13\', \'男\', \'3\', \'刘三\'), (\'14\', \'男\', \'3\', \'刘一\'), (\'15\', \'女\', \'3\', \'刘二\'), (\'16\', \'男\', \'3\', \'刘四\'); COMMIT; -- ---------------------------- -- 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` -- ---------------------------- BEGIN; INSERT INTO `teacher` VALUES (\'1\', \'张磊老师\'), (\'2\', \'李平老师\'), (\'3\', \'刘海燕老师\'), (\'4\', \'朱云海老师\'), (\'5\', \'李杰老师\'); COMMIT; SET FOREIGN_KEY_CHECKS = 1;
2、查询“生物”课程比“物理”课程成绩高的所有学生的学号;
select A.student_id from (select num,student_id from score left join course on course.cid=score.course_id where course.cname=\'生物\')as A inner join (select num,student_id from score left join course on course.cid=score.course_id where course.cname=\'物理\')as B on A.student_id=B.student_id where A.num>B.num
3、查询平均成绩大于60分的同学的学号、姓名和平均成绩;
select student_id,student.sname,avg(num) from score left join student on student.sid=score.student_id group by student_id having avg(num)>60
4、查询所有同学的学号、姓名、选课数、总成绩;
select student_id as 学号,student.sname as 姓名,count(1)as 选课数,sum(if(isnull(num),0,num))as 总成绩 from score left join student on student.sid=score.student_id group by student_id
5、查询姓“李”的老师的个数;
select count(1) from teacher where tname like \'李%\'
6、查询没学过“李平”老师课的同学的学号、姓名;
select student.sid,student.sname from student where student.sid not in ( select student_id from score where course_id in (select cid from course left join teacher on teacher.tid=course.teacher_id where teacher.tname=\'李平老师\') )
7、查询学过“001”并且也学过编号“003”课程的同学的学号、姓名;
方法一: select student_id,student.sname from score left join student on student.sid=score.student_id where student_id in (select student_id from score where course_id=1) and student_id in (select student_id from score where course_id=3) group by student_id 方法二: SELECT student_id,student.sname FROM (SELECT score.student_id FROM score WHERE course_id = 1 OR course_id = 3) AS A LEFT JOIN student ON A.student_id = student.sid GROUP BY student_id HAVING count(student_id) > 1
8、查询学过“叶平”老师所教的所有课的同学的学号、姓名;
select student_id,student.sname from score left join student on student.sid=score.student_id where course_id in ( select cid from course left join teacher on teacher.tid=course.teacher_id where teacher.tname=\'李平老师\' ) group by student_id having count(1)=(select count(1) from course left join teacher on teacher.tid=course.teacher_id where teacher.tname=\'李平老师\')
9、查询课程编号“002”的成绩比课程编号“001”课程低的所有同学的学号、姓名;
方法一: select student_id,student.sname from score left join student on student.sid=score.student_id where student_id in ( select A.student_id from (select num,student_id from score where course_id=2) as A inner join (select num,student_id from score where course_id=1)as B on A.student_id=B.student_id where A.num<B.num )group by student_id 方法二: select student.sid,student.sname from ( select A.student_id from (select score.student_id,score.num from score where course_id = 2)as A inner join (select score.student_id,score.num from score where course_id = 1)as B on A.student_id = B.student_id where A.num < B.num )as C left join student on C.student_id = student.sid
10、查询有课程成绩小于60分的同学的学号、姓名;
select student_id,student.sname from score left join student on score.student_id=student.sid where num<60 GROUP BY student_id
11、查询没有学全所有课的同学的学号、姓名;
方法一: select student_id,student.sname from score left join student on student.sid=score.student_id where student_id in ( select student_id from score where course_id in (select cid from course) )group by student_id having count(1)<(select count(1) from course) 方法二: select student.sid,student.sname from (select score.student_id from score where score.course_id in (select course.cid from course ) GROUP BY score.student_id HAVING count(score.student_id)<4 )as A LEFT JOIN student on student.sid= A.student_id
12、查询
以上是关于MySQL练习题的主要内容,如果未能解决你的问题,请参考以下文章
连接MySQL出现错误:ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using password: YES)(代码片段