0


10-26 查询成绩最高的前三名同学(MSSQL)

本题目要求编写SQL语句,
查询‘C语言’课程成绩最高的前三名同学。

提示:MSSQLServer 评测SQL语句。

表结构:

请在这里写定义表结构的SQL语句。例如:

-- 学生表
CREATE TABLE stu (
sno char(4) NOT NULL,
sname nvarchar(8) NOT NULL,
sex smallint DEFAULT NULL,
mno char(2) DEFAULT NULL,
birdate datetime DEFAULT NULL,
memo ntext,
PRIMARY KEY (sno)
);
-- 课程表
CREATE TABLE cou (
cno char(4) NOT NULL,
cname nvarchar(30) NOT NULL,
credit smallint DEFAULT NULL,
ptime char(5) DEFAULT NULL,
teacher nvarchar(10) DEFAULT NULL,
PRIMARY KEY ( cno )
);
-- 学生选课成绩表
CREATE TABLE sc (
sno char(4) NOT NULL, -- 学生学号
cno char(4) NOT NULL, -- 课程号
grade decimal(4,1) DEFAULT NULL,
PRIMARY KEY ( sno , cno ),
CONSTRAINT fk_sc_cno FOREIGN KEY ( cno ) REFERENCES cou ( cno ),
CONSTRAINT fk_sc_sno FOREIGN KEY ( sno ) REFERENCES stu ( sno )
)

表样例

请在这里给出上述表结构对应的表样例。例如

stu

表:

stu.JPG

cou

表:

cou.JPG

sc

表:

sc.JPG

输出样例:

请在这里给出输出样例。例如:

l223.JPG

思路:

1.最高前三名在mssql评测时只能用TOP函数,具体用法就是放在select后面TOP(x),表示取结果的前x个

2.连接三个表,where条件为cname为C语言的

3.order by 按grade排序,desc为降序

4.C语言前面的大写字母N,在mssql中必须加(注意不是mysql,是mssql),具体原因前面有解释,也可以百度一下

select TOP (3) sname as 姓名,grade as 成绩
from sc join stu on stu.sno=sc.sno
JOIN cou on cou.cno=sc.cno
where cname=N'C语言'
order by grade desc

本文转载自: https://blog.csdn.net/qq_45481523/article/details/132451844
版权归原作者 THK-J 所有, 如有侵权,请联系我们删除。

“10-26 查询成绩最高的前三名同学(MSSQL)”的评论:

还没有评论