mysql实验二、连接查询及嵌套查询

(1)查询软件学院学生选课及考试成绩。
查询结果包括:学号、姓名、课程名称和成绩。
通过连接学生表、课程表和SC表,可以使用WHERE子句过滤出软件学院学生信息,然后选择必填字段(学号、姓名、课程名称、成绩)。
(2)查询每个学生考试的平均成绩。
查询结果包括:学号、姓名、平均成绩。
通过连接student表和sc表,可以使用WHERE子句过滤出学生信息,然后使用GROUPBY子句按学号分组,计算平均成绩。
(3)查询所有选修两门及以上课程的男学生的学号、姓名、选课数。
通过连接sc表和student表,可以使用WHERE子句过滤出男生的信息,然后使用COUNT函数计算选课数。
GROUPBY子句将按学号分组,HAVING子句将过滤掉选课数大于2的记录。
(4)对于每个学生选择的课程,查找该学生选择的课程中的最高分。
查询结果包括:学号、姓名以及该学生的最高分,并且只显示最高分大于等于90分的相关信息。
通过连接student表和sc表,可以使用GROUPBY子句按学生姓名分组,使用MAX函数查找最高分,使用HAVING子句过滤掉分数大于或等于90分的记录。
(5)查询同时选修“课程#2”和“课程#3”的学生的学号和姓名。
使用嵌套IN子句,首先筛选出参加“课程#2”的学生,然后从这些学生中筛选出也参加“课程#3”的学生。
(6)获取学生选课超过所选课程平均成绩的信息。
查询结果包括:学号、课程号。
使用相关子查询,首先计算每个学生的平均成绩,然后过滤掉课程成绩高于平均成绩的记录。
(7)查询学生选课超过所选课程平均分的信息。
查询结果包括:学号、姓名、课程号、课程名称和成绩。
使用连接查询和相关子查询,首先连接student、sc和course表,然后计算每个学生的平均分数,并过滤掉分数高于平均分数的记录。
(8)查询“孟文”所修读的课程号和课程名称(需要实现嵌套查询,先过滤出孟文的学生信息,再过滤出该学生所修读的课程号)。
和课程名称。
(9)查询至少修完学生201215121选择的全部课程的学生人数。
(如果没有查询结果,则应调整相应数据表中的数据,使得至少有1条查询结果。
)(可选)首先,使用NOTEXISTS嵌套子查询进行过滤查找学生201215121选修的课程,然后从其他学生中筛选出至少选修过这些课程的学生人数。
(10)检查学号和至少选修过201215121学生选择的所有课程的学生姓名。
(如果没有查询结果,则调整对应数据表中的数据,使查询结果至少有1条。
)(可选)使用嵌套的NOTEXISTS子查询过滤出学生201215121参加的课程,然后过滤至少从其他学生那里选修过这些课程的学生的学号和姓名。

mysql中一张学生表,查询出单科成绩前十名学生的所有信息和总分成绩前十名学生的所有信息在线等

学生表名称为:Student,单科评价字段为:Subject。
学生姓名为:姓名

查询单科成绩前十名:MySQL语句为:select*fromstudentorderbysubjectdesclimit10;

查询综合成绩前十名:MySQL语句为:select*fromstudentorderbysubjectdesclimit10;语句为:selectsum(subject)subject,namefromstudentgroupbynameorderbysubjectdesclimit10;

注意:

selectsum(subject)subject,name

这句话的意思是:sum(subject)subject用于对Single的分数进行求和,name是subject命名后的一个字段(即总分),这里只有两个字段。

groupbynameorderbysubject:groupbyname表示按名称列分组。
当然,学生成绩单上的名字可能是一样的,学号是最准确的。
这只是一个例子。

按科目排序是指按总分排序。
这里的主语是指之前改名的总分。

selectsum(subject)ascountsubject,namefromstudentgroupbynameorderbycountsubjectdesclimit10;

高级信息:

学生成绩表常用SQL

1表一致与主键匹配

[sql]

/*成绩表*/

CREATETABLESC

(

SidINTREFERENCESStudent(Sid),/*学生号*/

CidINTREFERENCESCourse(Cid),/*课程号*/

ScoreINTNOTNULL,/*课程结果*/

PRIMARYKEY(Sid,Cid)/*设置学号和课程号为复合主键*/)2求各人的最高分、最低分和平均分主题来自

[sql]

SELECTc.Cname,MAX(s.Score)ASMax,MIN(s.Score)ASMin,AVG(s.Score)ASaverage

FROMCoursecJOINSCsONc.Cid=s.Cid

GROUPBYc.Cname

/*这里需要注意的是,SQL语句产生了错误如果不按c.Cname分组,并且SELECT语句中不允许c.Cname,则会报告。
,因为它没有出现在聚合函数或GROUPBY语句中]

SELECTSname,AVG(Score)ASAverageFROMStudentJOINSC

ONStudent.Sid=SC.Sid

GROUPBYSname

80

/*基于聚合函数的删除只能在HAVING语句中进行发生。
WHERE语句不支持聚合函数。
数量*/

4。
根据学生的总成绩排名。
如果总分相同,则排名相同

[sql]

SELECTRANK()OVER(ORDERBYSUM(ss.Result)DESC)ASRank,s.Sname,

ISNULL(SUM(ss.Score),0)

FROMStudentsLEFTJOINSCss

ONs.Sid​​=ss.Sid​​​​

GROUPBYs.Sname

ORDERBYSUM(ss.Score)DESC

/*RANK()是SQLServer的内置函数。
语法为

RANK()OVER([partition_by_clause]order_by_clause).*/5。
查询总分在100到200之间的学生姓名和总分

[sql]

SELECTs.Sname,SUM(ss.Score)FROMStudentsJOINSCssONs.Sid​​=ss.Sid​​​​

GROUPBYs.SnameHAVINGSUM(ss.Score)BETWEEN100AND200