建立一个存储过程student_info,要求根据班级查询学生的学号、姓名、课程号和分数(表结构如表2,表3)

CREATEPROCEDURE[student_info](@classvarchar(4))WITHEEXECUTEASCALLERAS从table2、table3中选择table2.studentnumber、table2.name、table3.coursenumber、table3.results,其中table2.studentnumber=表3.学生编号和Table2.Class=@classGO

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

学生表名称为:student,单科成绩字段为:subject。
学生姓名为:姓名

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

查询前十名成绩合计:mysql语句语句为:selectsum(subject)subject,namefromstudentgroupbynameorderbysubjectdesclimit10;

注意:

selectsum(subject)subject,name

这句话的意思是:sum(subject)subject用于将单个科目的分数相加。
按科目(即总分)命名,名称是一个字段,这里只有两个字段。

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

orderbysubject表示按照总分排序。
这里的主语是指之前改名的总分。

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

/*这里值得注意的是,如果不根据c.Cname进行分组,SQL语句会报错,c.Cname非法在SELECT语句中。
,因为它没有出现在聚合函数中,也没有出现在GROUPBY*/语句中

3查询平均成绩大于80分的学生姓名和平均成绩

[sql。
]

SELECTSname,AVG(分数)ASverageFROMStudentJOINSC

ONStudent.Sid=SC.Sid

GROUPBYSname

80

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

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

[sql]

SELECTRANK()OVER(ORDERBYSUM(ss.Score)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.se).*/5。
查询总分在100到200之间的学生姓名和总分

[sql]

SELECTs.Sname,SUM(ss.Score)FROMStuden。
tsJOINSCssONs.Sid​​=ss.Sid​​​​​​​

GROUPBYs.SnameHAVINGSUM(ss.Score)BETWEEN100AND200