数据库经典习题,
时间:2021-07-01 10:21:17
帮助过:8人阅读
数据导入:
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;
mysql习题代码
1、查询所有的课程(course)的名称以及对应的任课(teacher)老师姓名
select cname,tname from course left join teacher on course.teacher_id=teacher.tid;
2、查询学生表(student)中男女生各有多少人
select gender,count(sid) from student group by gender;
3、查询物理(course)成绩(score)等于100的学生(student)的姓名
select sname from student where sid in(select student_id from score where course_id=(select cid from course where cname=‘物理‘)and num=100);
4、查询平均成绩(score)大于八十分的同学(student)的姓名和平均成绩
select student.sname,t1.平均成绩 from student inner join
(select student_id,avg(num) 平均成绩 from score group by student_id having avg(num)>80)as t1
on student.sid=t1.student_id;
5、查询所有学生(student)的学号,姓名,选课数(course),总成绩(score)
select student.sid,student.sname 姓名,选课数,总成绩 from student inner join
(select student_id,count(course_id) 选课数,sum(num) 总成绩 from score group by student_id) as t1
on student.sid=t1.student_id;
6、 查询姓李(teacher)老师的个数
select count(tid) 李姓老师 from teacher where tname like ‘李%‘;
7、 查询没有报李平(teacher)老师课(course)的学生(student)姓名
select sname from student where sid not in
(select distinct student_id from score where course_id in(select cid from course where teacher_id=(select tid from teacher where tname=‘李平老师‘)));
8、 查询物理课程(course)比生物课程高(score)的学生(student)的学号
select t1.student_id from
(select student_id,num from course inner join score on score.course_id=course.cid where course.cname=‘物理‘) as t1
inner join
(select student_id,num from course inner join score on score.course_id=course.cid where course.cname=‘生物‘) as t2
on t1.student_id=t2.student_id
where t1.num>t2.num;
9、 查询没有同时(score)选修物理课程(course)和体育课程的学生(student)姓名
select sname from student where sid in
(select student_id from score inner join course on course.cname in(‘物理‘,‘体育‘)and course.cid=score.course_id group by student_id having count(course_id)=1);
10、查询挂科(score)超过两门(包括两门)的学生(student)姓名和班级(course)
select t2.sname,class.caption from #民投资,班级信息
(select sname,class_id from student inner join #名字班级挂科超过两次
(select student_id from score where num<60 group by student_id having count(course_id)>=2) as t1 #挂科2次
on student.sid=t1.student_id) as t2
inner join class
on class.cid = t2.class_id
11 、查询选修了所有课程的学生姓名
select sname from student inner join
(
select student_id from score group by student_id having count(course_id) = (select count(cid) from course)
) t1
on t1.student_id = student.sid
;
12、查询李平老师(teacher)教的课程的所有成绩(score)记录
select student_id,course_id,num from score inner join (select cid from course inner join teacher on teacher.tname=‘李平老师‘ and teacher.tid=course.teacher_id) as t1
on t1.cid=score.course_id;
#13、查询全部(student)学生都选修了的课程号和课程名(course)
select course.cid,course.cname from course inner join
(select course_id from score group by course_id having count(student_id)=(select count(sid) from student))as t1
on t1.course_id=course.cid;
#14、查询每门课程(course)被选修的次数(score)
select course.cname,选修人数 from course inner join #课程名,人数(次数)
(select course_id,count(student_id) 选修人数 from score group by course_id) as t1 #课程ID学生总人数
on t1.course_id=course.cid;
15、查询只选修了一门课程(course)的学生(student)姓名和学号
select sid,sname from student inner join (select student_id from score group by student_id having count(course_id)=1) as t1 #一门课程 student_id只选择一门课程的学生
on t1.student_id=student.sid;
#16、查询所有学生(student)考出的成绩(score)并按从高到低排序(成绩去重)
select distinct num from score order by num desc;
17、查询平均成绩(score)大于85的学生(student)姓名和平均成绩
select student.sname,平均成绩 from student inner join
(select student_id,avg(num) 平均成绩 from score group by student_id having avg(num)>85) as t1