MySQL练习(学生表,课程表,选课表)超详解

Durriya ·
更新时间:2024-11-13
· 758 次阅读

mysql练习一、题目:二、创建学生,课程,选课表并插入数据三、习题答案

环境: win10系统,MySQL数据库

一、题目: 已知关系: S(Sno,Sname,Sage,Ssex,Sdept) C(cno,cname,cpno,ccredit) SC(sno,cno,grade) (其中sno:学号;sname:姓名;Ssex:性别;Sdept:系别;Sage :年龄;cno:课程号;cname:课程名; cpno: 直接先行课;ccredit:学分;grade:成绩), 1、查询“CS”系学生的基本信息; 2、查询“CS”系学生年龄不在19到21之间的学生的学号、姓名; 3、查询学生中的最大年龄; 4、找出“计算机”系年龄最大的学生,显示其学号、姓名; 5、统计各系学生的人数,结果按升序排列; 6、按系统计各系学生的平均年龄,结果按降序排列; 7、查询选修了“1”或“2”号课程的学生学号和姓名; 8、查询选修了课程名为“数据库”且成绩在60分以下的学生的学号、姓名和成绩; 9、查询选修了3门以上课程的学生学号; 10、查询选修课程成绩至少有一门在80分以上的学生学号; 11、查询选修课程成绩均在80分以上的学生学号; 12、查询选修课程平均成绩在80分以上的学生学号 13、找出各系年龄最大的学生,显示其学号、姓名; 二、创建学生,课程,选课表并插入数据 #创建学生表:包括学号,姓名,年龄,性别,院系 CREATE TABLE S ( Sno VARCHAR(7)PRIMARY KEY, Sname VARCHAR(10)NOT NULL, Sage INT, Ssex VARCHAR(2), Sdept VARCHAR(20)DEFAULT('计算机系') ); #创建课程表:包括课程号,课程名,选修课课程号,学分 CREATE TABLE C ( Cno VARCHAR(10)PRIMARY KEY, Cname VARCHAR (20)NOT NULL, Cpno VARCHAR(10), Ccredit INT ); #创建选课表 CREATE TABLE SC ( Sno VARCHAR(7), Cno VARCHAR(10), grade INT, FOREIGN KEY (sno) REFERENCES S(Sno), FOREIGN KEY (cno) REFERENCES C(cno) ); # 向学生表S中插入数据 INSERT INTO s (Sno,Sname,Sage,Ssex,Sdept) VALUE ("10001","张三",20,'男','计算机'), ("10002","李梅",19,'女','计算机'), ("10003","王五",18,'男','CS'), ("10004","小明",21,'男','计算机'), ("10006","黎明",18,'男','艺术表演'), ("10008","杰克",21,'男','计算机'), ("10005","小红",22,'女','CS'); # 向课程表C中插入数据 INSERT INTO c (Cno,Cname,Cpno,Ccredit) VALUE ("1","离散数学",NULL,5), ("2","线性代数",'3',6), ("3","高等数学",NULL,4), ("4","数据结构",'3',6), ("5","操作系统",'1',4), ("6","数据库",'4',5); DELETE FROM c; # 向选课表SC中插入数据 INSERT INTO sc (Sno,Cno,grade) VALUE ("10001","1",70), ("10001","6",56), ("10003","4",90), ("10003","5",83), ("10004","1",75), ("10004","3",90), ("10008","1",70), ("10008","5",70), ("10008","6",88), ("10002","1",85), ("10002","6",89); 三、习题答案 # 1、查询“CS”系学生的基本信息; SELECT * FROM s WHERE Sdept="CS"; # 2、查询“CS”系学生年龄不在19到21之间的学生的学号、姓名; SELECT Sno,Sname,Sage,Sdept FROM s WHERE (Sage21) AND Sdept = "CS"; # 3、查询学生中的最大年龄; SELECT MAX(Sage) FROM s; # 4、找出“计算机”系年龄最大的学生,显示其学号、姓名; SELECT Sno, Sname FROM s WHERE Sdept="计算机" ORDER BY Sage DESC LIMIT 1; # 5、统计各系学生的人数,结果按升序排列; SELECT Sdept,COUNT(*) '人数' FROM s GROUP BY Sdept ORDER BY '人数'; # 6、按系统计各系学生的平均年龄,结果按降序排列; SELECT Sdept,AVG(Sage) '平均年龄' FROM s GROUP BY Sdept ORDER BY '平均年龄'DESC; # 7、查询选修了“1”或“2”号课程的学生学号和姓名; SELECT s.Sno,Sname FROM s JOIN sc ON s.`Sno`=sc.`Sno` WHERE Cno IN ("1","2"); # 8、查询选修了课程名为“数据库”且成绩在60分以下的学生的学号、姓名和成绩; SELECT s.Sno,Sname FROM s JOIN sc ON s.`Sno`=sc.`Sno` JOIN c ON sc.`Cno`=c.`Cno` WHERE Cname ="数据库" AND grade=3; # 10、查询选修课程成绩至少有一门在80分以上的学生学号; SELECT sno FROM sc GROUP BY sc.Sno HAVING MAX(grade)>80; # 11、查询选修课程成绩均在80分以上的学生学号; SELECT sno FROM sc GROUP BY sc.Sno HAVING MIN(grade)>80; # 12、查询选修课程平均成绩在80分以上的学生学号 SELECT sno FROM sc GROUP BY sc.Sno HAVING AVG(grade)>80; # 13、找出各系年龄最大的学生,显示其学号、姓名; SELECT sno,Sname FROM s JOIN (SELECT Sdept,MAX(Sage) Sage FROM s GROUP BY Sdept) a ON (s.`Sage`=a.Sage AND s.`Sdept` = a.Sdept) ;

如果对你有帮助,请点个赞。


作者:Variatio_Zbw



课程表 课程 Mysql

需要 登录 后方可回复, 如果你还没有账号请 注册新账号