我的第二次MySQL作业

发布时间:2026/7/24 12:46:29
我的第二次MySQL作业 1.题目要求2.建库建表1.建库使用库并查看当前库create database mydb11_stu;use mydb11_stu;select database();因为我这里已经提前创建并且换好库了就不给大家展示如何换库的了前面的语句有怎么建库换库这一步咱们就看看当前库是否是我们题目要求的库。2.建表1.创建并查看student表create table student (id int(10) not NULL unique primary key,name varchar(20) not NULL,sex varchar(4),birth year,department varchar(20),address varchar(50));desc student;2.创建并查看score表create table score (id int(10) not NULL unique primary key auto_increment,stu_id int(10) not null,c_name varchar(20),grade int(10));desc score;3.为两表插入数据insert student values(901,张三丰,男,2002,计算机系,北京市海淀区);insert student values(902,周全有,男,2000,中文系,北京市昌平区);insert student values(903,张思维,女,2003,中文系,湖南省永州市);insert student values(904,李广昌,男,1999,英语系,辽宁省阜新市);insert student values(905,王翰,男,2004,英语系,福建省厦门市);insert student values(906,王心凌,女,1998,计算机系,湖南省衡阳市);________________________________________________________________________insert into score values(null,901,计算机,98);insert into score values(null,901,英语,80);insert into score values(null,902,计算机,65);insert into score values(null,902,中文,88);insert into score values(null,903,中文,95);insert into score values(null,904,计算机,70);insert into score values(null,904,英语,92);insert into score values(null,905,英语,94);insert into score values(null,906,计算机,49);insert into score values(null,906,英语,83);4.全表查询select * from student;select * from score;3.作业拆解(1).分别查询student表和score表的所有记录select * from student;select * from score;(2).查询student表的第2条到5条记录select * from student limit 1,4;limit 1,4 也就是查第一列后四条也就是2到5要是题目要求第4到9 那就要写成limit 3,6(3).从student表中查询计算机系和英语系的学生的信息select * from student;咱们先全表查询一下看看这张表的具体信息select department 院系,name 姓名 from student where department计算机系 or department英语系;(4).从student表中查询年龄小于22岁的学生信息select name 姓名,year(now())-birth 年龄 from student where (year(now())-birth)22;可以看到结果是empty set 不存在这样一条数据但是咱们扩大年龄范围就可以看到这里面年龄最小的都已经22了所以刚才才查不出比22小的学生信息(5).从student表中查询每个院系有多少人select department 院系,count(id) 人数 from student group by 1;或者select department 院系,count(id) 人数 from student group by department;第一种呢是因为select后面跟的第一个参数是department所以后面group by 接的参数就可以直接写1第二种方法就是比较老实的写法具体选哪种看个人喜好吧。(6).从score表中查询每个科目的最高分同样是两种写法select c_name 科目,max(grade) 最高分 from score group by 1;或者select c_name 科目,max(grade) 最高分 from score group by c_name;后续出现这种类似的两种方法解题情况咱们就只展示第一种了这种简单当然要是喜欢写第二种就根据select后面跟的参数的次序以及题目要求来写。当然直接看我这里的第一种写法对照着select后面的参数次序来写也行。题目要求每个科目咱们就根据科目分组也就是那按照院系分(7).查询李广昌的考试科目(c_name)和考试成绩(grade)select sc.c_name 考试科目 ,sc.grade 考试成绩 from score sc,student st where st.idsc.stu_id and st.name李广昌;这里涉及到两张表所以要用多表查询的方法。from 后面跟上要查询的表 被查询表的别名后续咱们跟条件的时候就要用别名去跟这里连接两张表的条件st表(student表)的id和sc表(score表)有一一对应的关系所以用等号连接起来再跟上条件st.name李广昌还有一种方法内连接select sc.c_name 考试科目 ,sc.grade 考试成绩 from score sc inner join student st on st.idsc.stu_id andst.name李广昌;on 后面依旧是接的两个表的相通部分(8).用连接的方式查询所有学生的信息和考试信息select * from score sc join student st on sc.stu_idst.id;(9).计算每个学生的总成绩select st.name 姓名,sum(sc.grade) 总成绩 from student st join score sc on st.idsc.stu_id group by sc.stu_id;题目说了每个那我们就按照学号进行分组学号是两张表的共同部分分组既可以写成 group by sc.stu_id 也可以写成group by st.id;(10).计算每个考试科目的平均成绩select c_name 考试科目,round(avg(grade),2) 平均成绩 from score group by 1;题目说每个科目我们就按科目分组求平均成绩咱们预判一下数字很长用round函数保留2位小数(11).查询计算机成绩低于95的学生信息select st.name 姓名,sc.grade成绩 from student st join score sc on st.idsc.stu_id where sc.c_name计算机 and sc.grade95;(12).将计算机考试成绩按从高到低进行排序select st.name 姓名,sc.grade 成绩 from student st join score sc on st.idsc.stu_id where sc.c_name计算机 order by sc.grade desc;(13).从student表和score表中查询出学生的学号然后合并查询结果select id from student union select stu_id from score;联合查询 union(14).查询姓张或者姓王的同学的姓名、院系和考试科目及成绩select st.name 姓名,st.department 院系,sc.c_name 考试科目,sc.grade 成绩 from student st join score sc on st.idsc.stu_id where st.name like 张% or name like 王%;查询姓什么用模糊查询like x% x代表了姓%的意思就是不定字符内容不定字数(15).查询都是湖南的学生的姓名、年龄、院系和考试科目及成绩select name 姓名,year(now())-birth 年龄,department 院系,sc.c_name 科目,sc.grade成绩 from student stjoin score sc on st.idsc.stu_id where st.address like 湖南%;这里依然是要用到模糊检索like 湖南%,其余的没多难4.结语第二次作业的难度较第一次有明显的上升这更加考验大家的专注力与适应能力了要说多难其实也不至于但确实是比第一次要难。所以继续加油吧QAQ