失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > MySQL(二)创建大学数据库以及多表查询

MySQL(二)创建大学数据库以及多表查询

时间:2020-04-14 08:12:04

相关推荐

MySQL(二)创建大学数据库以及多表查询

大学数据库创建==>传送门链接: link.

先把上次遗留下来的问题给解决

//10、创建新表stu_new,该新表中包含学号、课程号和总评成绩。其中总评成绩=daily*0.2+final*0.8,查看该新表的结构CREATE TABLE IF NOT EXISTS `stu_new`(`学号` INT UNSIGNED AUTO_INCREMENT,`课程号` VARCHAR(100) NOT NULL,`总评成绩` VARCHAR(40) NOT NULL,PRIMARY KEY ( `学号` ))ENGINE=InnoDB DEFAULT CHARSET=utf8;

/*1、找出至少一门课程的期末成绩在90分以上的女学生的姓名。*/SELECT DISTINCT sname 姓名FROM student stuINNER JOIN score sWHERE sex = '女' and s.final > 90;/*2、查询选修课程名为Java语言课程且期末成绩在90分以上的学生的学号。(distinct:去重)*/SELECT DISTINCT studentnoFROM scoreINNER JOIN course/*INNER JOIN 两表之间取交集*/WHERE cname = 'Java语言' AND score.final > 90;/*3、查询选修课程号为c05103的学生的学号、姓名和期末成绩*/SELECT stu.studentNo 学号, stu.sname 姓名, s.final 期末成绩FROM student stuINNER JOIN score s ON stu.studentNo = s.studentnoWHERE s.courseno = 'c05103';/*4、统计选课门数超过两门的学生的学号及姓名*/SELECT studentNo 学号, sname 姓名FROM studentWHERE studentno in(/*in常用于where表达式中,其作用是查询某个范围内的数据*/SELECT studentnoFROM scoreGROUP BY studentnoHAVING COUNT(*)> 2);/*5、查询选修了姓“苏”的老师的课程的学生的学号。*/SELECT studentno 学号FROM scoreWHERE courseno IN(SELECT coursenoFROM teach_courseWHEREteacherno = (SELECT teachernoFROM teacherWHEREtname LIKE "苏%"))GROUP BY studentno;/*6、求每个学生所选修课程的期末平均分,要求显示学生的学号,姓名,及所选修课程的期末平均成绩(期末平均成绩作为别名显示,且运用round函数使期末平均成绩保留一位小数),并按期末平均成绩从高到低排序。TRUNCATE(X,D)X 表示需要处理的数字,D 表示需要截取的位数。如果 D 为零,则返回的数字不含小数。*/SELECT s.studentno 学号, stu.sname 姓名, TRUNCATE(avg(final), 1) 期末平均成绩FROM student stuJOIN score s ON s.studentno = stu.studentNoGROUP BY s.studentno, stu.snameORDER BY 期末平均成绩 DESC;/*7、查询19级学生的学号、姓名、课程名、期末成绩及学分(要求以别名学分显示所求学分,其中每门课程的学分等于该课程的总学时除以16)*/SELECT stu.studentno 学号, stu.sname 姓名,ame 课程名, s.final 期末成绩,TRUNCATE(c.period/16, 1) 学分FROM student stu, score s, course cWHERE s.studentno = stu.studentNo AND c.courseno = s.courseno;/*8、查询与“王伟”在同一个系学习的学生的基本信息*/SELECT *FROM studentWHERE departmentname = (SELECT departmentnameFROM studentWHERE sname = '王伟');/*9、查询选修了“数据库原理"课程的学生的学号和姓名*/SELECT stu.studentno 学号, stu.sname 姓名FROM student stuJOIN score s ON stu.studentNo = s.studentnoWHERE courseno= (SELECT courseno FROM course WHERE cname = '数据库原理');/*10、查询期末成绩大于等于90分、总评成绩高于85分的学生的学号、课程号和总评成绩(要求以别名总评成绩显示总评成绩,其中总评成绩=平时成绩*30%+期末成绩*70%)*/SELECT s.studentno 学号, s.courseno 课程号,(daily*0.3 + final*0.7) 总评成绩FROM score sWHERE (daily*0.3 + final*0.7) > 85 AND final > 90;/*11、查询期末成绩比选修课程平均期末成绩低的学生的姓名、课程号和期末成绩*/SELECT stu.sname 姓名, s.courseno 课程号, s.final 期末成绩FROM student stuINNER JOIN score s ON s.studentno = stu.studentNoINNER JOIN (SELECT studentno, AVG(final) avg FROM score GROUP BY studentno) f ON s.studentno = f.studentNoWHERE final < avg;/*12、查询期末成绩中含有高于90分的学生的学号、姓名、电话及课程名*/SELECT stu.studentNo 学号, stu.sname 姓名,stu.phone 电话, ame 课程名FROM student stuJOIN score s ON s.studentno = stu.studentNoJOIN course c ON c.courseno = s.coursenoWHERE final > 90;/*13、查找score表中所有比c05103课程期末成绩都高的学生的学号、姓名和期末成绩*/SELECT stu.studentNo 学号,stu.sname 姓名,s.final 期末成绩FROM student stu, score sWHERE stu.studentNo = s.studentno AND final>all(SELECT final FROM score WHERE courseno='c05103');/*14、查询每一课程的间接先行课(即先行课的先行课)。*/SELECT ame 课程名, c.cpno 先行课, s.cpno 间接先行课FROM course cJOIN course s ON s.courseno = c.cpno;ORDER BY '先行课';/*15、找出每个学生期末成绩超过他选修课程期末平均成绩的学生的学号及课程号*/SELECT s.studentno 学号, s.courseno 课程号FROM score sINNER JOIN (SELECT studentno, avg(final) avg FROM score GROUP BY studentno) a ONs.studentno = a.studentnoWHERE s.final > avg;/*16、查询年龄低于所有计数院学生的学生姓名、所在系、年龄。*/SELECT sname 学生姓名, departmentname 所在系,TIMESTAMPDIFF(YEAR, birthdate, CURDATE()) 年龄FROM studentWHERE TIMESTAMPDIFF(YEAR, birthdate, CURDATE()) < (SELECT MIN(TIMESTAMPDIFF(YEAR, birthdate, CURDATE()))FROM studentWHERE departmentname = '计数院');/*17、查询选修了全部课程的学生姓名。*/SELECT snameFROM studentWHERE studentNo in(SELECT studentnoFROM scoreGROUP BY studentnoHAVING COUNT(*) = (SELECT COUNT(*)FROM courseWHERE type = '选修'));/*18、查询至少选修了学生18125111109必修的全部课程的学生学号,注意查询结果中不应该含有18125111109学生*/SELECT studentno FROMscoreWHERENOT EXISTS ( SELECT courseno FROM score WHERE a.studentno = studentno AND studentno = 18125111109 ) AND studentno != 18125111109 GROUP BY studentno;/*19、查询3月份苏姓老师的授课信息,包括教工号,教师姓名,课程名,授课时间。*//*ON的作用:添加约束;on后面就是我们加的条件*/SELECT t.teacherno 教工号, t.tname 教师姓名,ame 课程名, tc.teachtime 授课时间FROM teacher tINNER JOIN teach_course tc ON t.teacherno = tc.teachernoINNER JOIN course c ON tc.courseno = c.coursenoWHERE t.tname LIKE '苏%'AND YEAR(teachtime) = AND MONTH(teachtime) = 3;/*20、查询没有学生选修的课程的课程号*/SELECT courseno 课程号FROM course cWHERE NOT EXISTS(SELECT *FROM scoreWHERE c.courseno = courseno);

照旧给几张运行成功的截图

多表查询写起来感觉要比单表查询难得多,反正我是感觉不容易。

这次就先这样,其实还有一道附加题,我找时间做完了再分享给大家吧

如果觉得《MySQL(二)创建大学数据库以及多表查询》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。