已知两张表 S(sno,sname,sage)sno为学号,sname为姓名,sage为年龄 SC(sno,cno,grade)sno为学号,cno为课程号,grade为sno这个学生选修了cno这门课获得的成绩 列出每门课(cno)的最高分的学生姓名(sname)
时间: 2024-03-02 15:54:22 浏览: 31
可以使用如下SQL语句来实现:
```
SELECT cno, MAX(grade), sname
FROM SC
INNER JOIN S ON SC.sno = S.sno
GROUP BY cno, sname;
```
这里使用了 INNER JOIN 来连接两张表,然后按照 cno 和 sname 进行分组,最后通过 MAX 函数来获取每门课的最高分。
相关问题
有表SC(Sno,Cno,Grade),C(Cno,Cname,Cpno,Ccredit),S(Sno,Sname,Sage,Sdept)
这里给出的是三张表:
SC表包含了学生选课信息,包括学生编号(Sno)、课程编号(Cno)和成绩(Grade)。
C表包含了课程信息,包括课程编号(Cno)、课程名称(Cname)、先修课程编号(Cpno)和学分(Ccredit)。
S表包含了学生信息,包括学生编号(Sno)、姓名(Sname)、年龄(Sage)和所属学院(Sdept)。
这三张表都是关系型数据库中的表,可以通过SQL语句进行查询、插入、更新和删除等操作。例如,可以使用以下语句查询SC表中某个学生的选课情况:
```
SELECT C.Cname, SC.Grade
FROM C, SC
WHERE C.Cno = SC.Cno AND SC.Sno = '123';
```
这个语句会查询出学生编号为'123'的学生所选的所有课程的名称和成绩。其中,使用了表连接来将C表和SC表关联起来,并且使用了条件语句来筛选出特定的学生。
student表:Sno,sname,sage,ssex,sdept;course表:cno,cname,cpno,ccredit;SC表:sno,sno,grade查询至少有一门课与学号为"200215121 "的同学所学相同的同学
您可以使用如下SQL语句来查询至少有一门课与学号为"200215121 "的同学所学相同的学生:
```
SELECT DISTINCT s2.sno, s2.sname
FROM student s1, student s2, SC c1, SC c2
WHERE s1.sno = '200215121'
AND s1.sno = c1.sno
AND c1.cno = c2.cno
AND c2.sno = s2.sno
AND s1.sno <> s2.sno;
```
解释一下上述SQL语句:
1. 首先从student表中找到学号为“200215121”的学生,记为s1;
2. 然后从SC表中找到与s1学号相同的选课记录c1;
3. 接着从SC表中找到与c1所对应的课程相同的其他选课记录c2;
4. 然后从student表中找到与c2对应的学生,记为s2;
5. 最后输出s2的学号和姓名,注意要去重。
这样,就可以查询到至少有一门课与学号为"200215121 "的同学所学相同的学生了。