day35 作业

本小妞迷上赌 提交于 2019-12-02 23:57:27

创建班级表

create table class(
class_id int primary key auto_increment,
class_name varchar(32) not null default''
)charset utf8;

insert into class values
(1,'三年二班'),
(2,'终极一班'),
(3,'快乐池塘');

创建学生表

create table student(
student_id int primary key auto_increment,
student_name varchar(32) not null default'',
student_number int not null default 0,
gender enum('男','女'),
stu_class int not null default 0,

constraint fk_student_class foreign key (stu_class) references class(class_id)

)charset=utf8;

insert into student values
(1,'张三',111,'男',1),
(2,'李四',222,'男',1),
(3,'王五',333,'男',2),
(4,'赵六',444,'女',2),
(5,'鬼脚七',555,'男',3),
(6,'小跳蛙',666,'女',3);

创建老师表

create table teacher(
teacher_id int primary key auto_increment,
teacher_name varchar(32) not null default''
)charset utf8;

insert into teacher values
(1,'赵铁柱'),
(2,'李狗蛋'),
(3,'加藤鹰'),
(4,'敖厂长'),
(5,'穆罕默德'),
(6,'王德发');

创建课程表

create table course(
course_id int primary key auto_increment,
course_name varchar(32) not null default '',
course_teacher int not null default 0,

constraint fk_course_teacher foreign key (course_teacher) references teacher(teacher_id)

)charset utf8;

insert into course values
(1,'心理学',4),
(2,'数学',2),
(3,'网络编程',1),
(4,'爆炸学',5),
(5,'牧羊',5),
(6,'金手指外挂',3),
(7,'软件工程',6);

创建成绩单

create table score(
score_course int not null default 0,
score_student int not null default 0,
score int not null default 0,

constraint fk_score_course foreign key (score_course) references course(course_id),
constraint fk_score_student foreign key (score_student) references student(student_id)

)charset utf8;

insert into score values
(1,1,60),
(1,2,55),
(1,3,65),
(7,4,56),
(7,5,77),
(2,2,88),
(3,2,57),
(3,4,33),
(3,6,77),
(3,5,73),
(4,1,69),
(4,3,85),
(4,5,44),
(5,2,68),
(5,3,37),
(6,4,100);

1. 查询所有大于60分的学生的姓名和学号 (DISTINCT: 去重)

mysql> select distinct student_name,student_number from student left join score on score.score_student = student.student_id where score.score > 60;
+--------------+----------------+
| student_name | student_number |
+--------------+----------------+
| 张三 | 111 |
| 李四 | 222 |
| 王五 | 333 |
| 赵六 | 444 |
| 鬼脚七 | 555 |
| 小跳蛙 | 666 |
+--------------+----------------+
6 rows in set (0.01 sec)

2.查询每个老师教授的课程数量 和 老师信息

mysql> select teacher_id, teacher_name,count(course_name) from teacher left join course on course.course_teacher = teacher.teacher_id group by course_teacher;
+------------+--------------+--------------------+
| teacher_id | teacher_name | count(course_name) |
+------------+--------------+--------------------+
| 1 | 赵铁柱 | 1 |
| 2 | 李狗蛋 | 1 |
| 3 | 加藤鹰 | 1 |
| 4 | 敖厂长 | 1 |
| 5 | 穆罕默德 | 2 |
| 6 | 王德发 | 1 |
+------------+--------------+--------------------+
6 rows in set (0.01 sec)

3. 查询学生的信息以及学生所在的班级信息

mysql> select student_id,student_name,student_number,gender,class_name from student left join class on class.class_id = student.stu_class;
+------------+--------------+----------------+--------+--------------+
| student_id | student_name | student_number | gender | class_name |
+------------+--------------+----------------+--------+--------------+
| 1 | 张三 | 111 | 男 | 三年二班 |
| 2 | 李四 | 222 | 男 | 三年二班 |
| 3 | 王五 | 333 | 男 | 终极一班 |
| 4 | 赵六 | 444 | 女 | 终极一班 |
| 5 | 鬼脚七 | 555 | 男 | 快乐池塘 |
| 6 | 小跳蛙 | 666 | 女 | 快乐池塘 |
+------------+--------------+----------------+--------+--------------+
6 rows in set (0.01 sec)

4、学生中男生的个数和女生的个数

mysql> select gender,count(gender) from student group by gender;
+--------+---------------+
| gender | count(gender) |
+--------+---------------+
| 男 | 4 |
| 女 | 2 |
+--------+---------------+
2 rows in set (0.00 sec)

5、获取所有学习'生物'的学生的学号和成绩;姓名

mysql> select student_number,student_name,score from student left join score on student.student_id = score.score_student left join course on course.course_id = score.score_course where course_name = '网络编程';
+----------------+--------------+-------+
| student_number | student_name | score |
+----------------+--------------+-------+
| 222 | 李四 | 57 |
| 444 | 赵六 | 33 |
| 555 | 鬼脚七 | 73 |
| 666 | 小跳蛙 | 77 |
+----------------+--------------+-------+
4 rows in set (0.00 sec)

6、查询平均成绩大于60分的同学的学号和平均成绩;

mysql> select student_number,avg(score) from student left join score on student.student_id = score.score_student group by score_student having avg(score) > 60;
+----------------+------------+
| student_number | avg(score) |
+----------------+------------+
| 111 | 64.5000 |
| 222 | 67.0000 |
| 333 | 62.3333 |
| 444 | 63.0000 |
| 555 | 64.6667 |
| 666 | 77.0000 |
+----------------+------------+
6 rows in set (0.01 sec)

7、查询姓“李”的老师的个数;

mysql> select count(teacher_name),teacher_name from teacher where teacher_name like ' 李%';
+---------------------+--------------+
| count(teacher_name) | teacher_name |
+---------------------+--------------+
| 1 | 李狗蛋 |
+---------------------+--------------+
1 row in set (0.00 sec)

8、查询课程成绩小于60分的同学的学号、姓名;

mysql> select distinct student_number,student_name from student left join score on student.student_id = score.score_student where score<60;
+----------------+--------------+
| student_number | student_name |
+----------------+--------------+
| 222 | 李四 |
| 333 | 王五 |
| 444 | 赵六 |
| 555 | 鬼脚七 |
+----------------+--------------+
4 rows in set (0.00 sec)

9. 删除学习“叶平”老师课的SC表记录

mysql> select * from score;
+--------------+---------------+-------+
| score_course | score_student | score |
+--------------+---------------+-------+
| 1 | 1 | 60 |
| 1 | 3 | 65 |
| 7 | 4 | 56 |
| 7 | 5 | 77 |
| 2 | 2 | 88 |
| 3 | 2 | 57 |
| 3 | 4 | 33 |
| 3 | 6 | 77 |
| 3 | 5 | 73 |
| 4 | 1 | 69 |
| 4 | 3 | 85 |
| 4 | 5 | 44 |
| 5 | 2 | 68 |
| 5 | 3 | 37 |
| 6 | 4 | 100 |
+--------------+---------------+-------+
15 rows in set (0.00 sec)

mysql> delete from score where score_course in (select course_id from course left join teacher on teacher.teacher_id = course.course_teacher where teacher_name = '王德发');
Query OK, 2 rows affected (0.11 sec)

mysql> select * from score;
+--------------+---------------+-------+
| score_course | score_student | score |
+--------------+---------------+-------+
| 1 | 1 | 60 |
| 1 | 3 | 65 |
| 2 | 2 | 88 |
| 3 | 2 | 57 |
| 3 | 4 | 33 |
| 3 | 6 | 77 |
| 3 | 5 | 73 |
| 4 | 1 | 69 |
| 4 | 3 | 85 |
| 4 | 5 | 44 |
| 5 | 2 | 68 |
| 5 | 3 | 37 |
| 6 | 4 | 100 |
+--------------+---------------+-------+
13 rows in set (0.00 sec)

10.查询各科成绩最高和最低的分:以如下形式显示:课程ID,最高分,最低分;

mysql> select course_id as '课程ID',max(score) as '最高分',min(score) as '最低分' from course left join score on course_id = score_course group by course_id;
+----------+-----------+-----------+
| 课程ID | 最高分 | 最低分 |
+----------+-----------+-----------+
| 1 | 65 | 55 |
| 2 | 88 | 88 |
| 3 | 77 | 33 |
| 4 | 85 | 44 |
| 5 | 68 | 37 |
| 6 | 100 | 100 |
| 7 | 77 | 56 |
+----------+-----------+-----------+
7 rows in set (0.00 sec)

11.查询每门课程被选修的学生数

mysql> select course_name,count(score_student) from score left join course on course.course_id = score.score_course group by score_course;
+-----------------+----------------------+
| course_name | count(score_student) |
+-----------------+----------------------+
| 心理学 | 3 |
| 数学 | 1 |
| 网络编程 | 4 |
| 爆炸学 | 3 |
| 牧羊 | 2 |
| 金手指外挂 | 1 |
| 软件工程 | 2 |
+-----------------+----------------------+
7 rows in set (0.00 sec)

12.查询姓“张”的学生名单;

mysql> select student_id,student_name,student_number,gender,stu_class from student where student_name like '张%';
+------------+--------------+----------------+--------+-----------+
| student_id | student_name | student_number | gender | stu_class |
+------------+--------------+----------------+--------+-----------+
| 1 | 张三 | 111 | 男 | 1 |
+------------+--------------+----------------+--------+-----------+
1 row in set (0.00 sec)

13.查询每门课程的平均成绩,结果按平均成绩升序排列,平均成绩相同时,按课程号降序排列

mysql> select course_name,avg(score) from course left join score on course.course_id = score.score_course group by course_name order by avg(score) asc,course_id desc;
+-----------------+------------+
| course_name | avg(score) |
+-----------------+------------+
| 牧羊 | 52.5000 |
| 网络编程 | 60.0000 |
| 心理学 | 60.0000 |
| 爆炸学 | 66.0000 |
| 软件工程 | 66.5000 |
| 数学 | 88.0000 |
| 金手指外挂 | 100.0000 |
+-----------------+------------+
7 rows in set (0.00 sec)

14.查询平均成绩大于75的所有学生的学号、姓名和平均成绩

mysql> select student_number,student_name,avg(score) from student left join score on student.student_id = score.score_student group by student_name having avg(score) > 75;
+----------------+--------------+------------+
| student_number | student_name | avg(score) |
+----------------+--------------+------------+
| 666 | 小跳蛙 | 77.0000 |
+----------------+--------------+------------+
1 row in set (0.00 sec)

15.查询课程编号为3且课程成绩在70分以上的学生的学号和姓名;

mysql> select student_id,student_name from student left join score on student.student_id = score.score_student where score_course = 3 and score > 70;
+------------+--------------+
| student_id | student_name |
+------------+--------------+
| 6 | 小跳蛙 |
| 5 | 鬼脚七 |
+------------+--------------+
2 rows in set (0.00 sec)

16.查询各个课程及相应的选修人数

mysql> select course_name,count(student_name) from student left join score on student.student_id = score.score_student left join course on course.course_id = score.score_course group by course_name;
+-----------------+---------------------+
| course_name | count(student_name) |
+-----------------+---------------------+
| 心理学 | 3 |
| 数学 | 1 |
| 爆炸学 | 3 |
| 牧羊 | 2 |
| 网络编程 | 4 |
| 软件工程 | 2 |
| 金手指外挂 | 1 |
+-----------------+---------------------+
7 rows in set (0.00 sec)

17.查询“4”课程分数大于60,按分数降序排列的同学学号

mysql> select student_id,score from student left join score on student.student_id = score.score_student where score_course = 4 and score > 60 order by score desc;
+------------+-------+
| student_id | score |
+------------+-------+
| 3 | 85 |
| 1 | 69 |
+------------+-------+
2 rows in set (0.00 sec)

18.删除学号为“2”的同学的“1”课程的成绩

mysql> select * from score;
+--------------+---------------+-------+
| score_course | score_student | score |
+--------------+---------------+-------+
| 1 | 1 | 60 |
| 1 | 2 | 55 |
| 1 | 3 | 65 |
| 7 | 4 | 56 |
| 7 | 5 | 77 |
| 2 | 2 | 88 |
| 3 | 2 | 57 |
| 3 | 4 | 33 |
| 3 | 6 | 77 |
| 3 | 5 | 73 |
| 4 | 1 | 69 |
| 4 | 3 | 85 |
| 4 | 5 | 44 |
| 5 | 2 | 68 |
| 5 | 3 | 37 |
| 6 | 4 | 100 |
+--------------+---------------+-------+
16 rows in set (0.00 sec)

mysql> delete from score where score_student = 2 and score_course = 1;
Query OK, 1 row affected (0.03 sec)

mysql> select * from score;
+--------------+---------------+-------+
| score_course | score_student | score |
+--------------+---------------+-------+
| 1 | 1 | 60 |
| 1 | 3 | 65 |
| 7 | 4 | 56 |
| 7 | 5 | 77 |
| 2 | 2 | 88 |
| 3 | 2 | 57 |
| 3 | 4 | 33 |
| 3 | 6 | 77 |
| 3 | 5 | 73 |
| 4 | 1 | 69 |
| 4 | 3 | 85 |
| 4 | 5 | 44 |
| 5 | 2 | 68 |
| 5 | 3 | 37 |
| 6 | 4 | 100 |
+--------------+---------------+-------+
15 rows in set (0.00 sec)

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!