mysql查询所以学生的总成绩,要求列出Sno,Sname,总成绩,没选修课程的学生总成绩为空
时间: 2024-10-13 08:06:54 浏览: 82
在MySQL中,你可以通过联接学生表(假设名为`students`)和课程表(假设名为`courses`),然后使用`COALESCE`函数来处理未选修课程的情况来完成这个查询。这里是一个示例SQL语句:
```sql
SELECT
students.Sno,
students.Sname,
COALESCE(SUM(courses.Grade), 0) AS TotalScore
FROM
students
LEFT JOIN
courses ON students.Sno = courses.Student_Sno
GROUP BY
students.Sno, students.Sname;
```
这个查询做了以下几件事:
1. `LEFT JOIN`:将学生表与课程表左连接,这样每个学生都会出现在结果集中,即使他们没有选修任何课程。
2. `SUM(courses.Grade)`:计算每个学生所有选修课程的成绩总和。
3. `COALESCE(SUM(courses.Grade), 0)`:如果某个学生没有任何课程记录(即SUM的结果为NULL),则用0填充(也就是他们的总成绩为0)。
相关问题
sql 根据实验2创建的s、c和sc表完成如下查询: s(sno,sname,age,sex,sdept,major c(cno,cname,cpno,teacher,credit) sc(sno,cno,grade) 1查询学生选课表中的全部数据。 2 查询计算机系学生的姓名,年龄。 3查询成绩在70-80分之间的学生的学号课程号和成绩。 4 查询计算机系年龄在18-20之间且性别为“男”的学生的姓名和年龄。 5 查询课程号为“C01”的课程的最高分数。 6查询计算机系学生的最大年龄和最小年龄。 7统计每个系的学生人数。 8统计每门课程的选课人数和考试最高分。 9查询每个学生的选课门数和考试总成绩,并报 数的升序显示结果。 写笔记 10查询总成绩超过200分的学生,要求列出学号,总成绩。 11查询选修了“C02”的学生的姓名和所在系。 12 查询成绩在80分以上的学生的姓名,课程号和成绩并按成绩的降序排列。 13 查询哪些课程没有人选修,要求列出课程号和课程名。14 查询缺少了成绩的学生的学号和课程号。 15查询数学系学生的学号和姓名。 16 查询选修了课程的学生学号 17 查询选修了数学课的学生学号和成绩,并要求对查询结果按成绩降序排列,如果成绩相同则按学号升序排列。 18查询选修数学课其且成绩在80-90之间的学生学号和成绩,并将成绩乘以系数0.8输出。 19 查询数学系或计算机系姓刘的学生的信息。
1. 查询学生选课表中的全部数据。
```
SELECT * FROM sc;
```
2. 查询计算机系学生的姓名,年龄。
```
SELECT s.sname, s.age FROM s WHERE s.sdept = '计算机系';
```
3. 查询成绩在70-80分之间的学生的学号课程号和成绩。
```
SELECT sc.sno, sc.cno, sc.grade FROM sc WHERE sc.grade BETWEEN 70 AND 80;
```
4. 查询计算机系年龄在18-20之间且性别为“男”的学生的姓名和年龄。
```
SELECT s.sname, s.age FROM s WHERE s.sdept = '计算机系' AND s.age BETWEEN 18 AND 20 AND s.sex = '男';
```
5. 查询课程号为“C01”的课程的最高分数。
```
SELECT MAX(sc.grade) FROM sc WHERE sc.cno = 'C01';
```
6. 查询计算机系学生的最大年龄和最小年龄。
```
SELECT MAX(s.age), MIN(s.age) FROM s WHERE s.sdept = '计算机系';
```
7. 统计每个系的学生人数。
```
SELECT s.sdept, COUNT(*) FROM s GROUP BY s.sdept;
```
8. 统计每门课程的选课人数和考试最高分。
```
SELECT sc.cno, COUNT(*), MAX(sc.grade) FROM sc GROUP BY sc.cno;
```
9. 查询每个学生的选课门数和考试总成绩,并按升序显示结果。
```
SELECT sc.sno, COUNT(sc.cno), SUM(sc.grade) FROM sc GROUP BY sc.sno ORDER BY SUM(sc.grade) ASC;
```
10. 查询总成绩超过200分的学生,要求列出学号,总成绩。
```
SELECT sc.sno, SUM(sc.grade) FROM sc GROUP BY sc.sno HAVING SUM(sc.grade) > 200;
```
11. 查询选修了“C02”的学生的姓名和所在系。
```
SELECT s.sname, s.sdept FROM s, sc WHERE s.sno = sc.sno AND sc.cno = 'C02';
```
12. 查询成绩在80分以上的学生的姓名,课程号和成绩并按成绩的降序排列。
```
SELECT s.sname, sc.cno, sc.grade FROM s, sc WHERE s.sno = sc.sno AND sc.grade > 80 ORDER BY sc.grade DESC;
```
13. 查询哪些课程没有人选修,要求列出课程号和课程名。
```
SELECT c.cno, c.cname FROM c WHERE NOT EXISTS (SELECT * FROM sc WHERE c.cno = sc.cno);
```
14. 查询缺少了成绩的学生的学号和课程号。
```
SELECT sc.sno, sc.cno FROM sc WHERE sc.grade IS NULL;
```
15. 查询数学系学生的学号和姓名。
```
SELECT s.sno, s.sname FROM s WHERE s.sdept = '数学系';
```
16. 查询选修了课程的学生学号。
```
SELECT DISTINCT sc.sno FROM sc;
```
17. 查询选修了数学课的学生学号和成绩,并要求对查询结果按成绩降序排列,如果成绩相同则按学号升序排列。
```
SELECT sc.sno, sc.grade FROM sc, c WHERE sc.cno = c.cno AND c.cname = '数学' ORDER BY sc.grade DESC, sc.sno ASC;
```
18. 查询选修数学课其且成绩在80-90之间的学生学号和成绩,并将成绩乘以系数0.8输出。
```
SELECT sc.sno, sc.grade * 0.8 FROM sc, c WHERE sc.cno = c.cno AND c.cname = '数学' AND sc.grade BETWEEN 80 AND 90;
```
19. 查询数学系或计算机系姓刘的学生的信息。
```
SELECT * FROM s WHERE s.sdept IN ('数学系', '计算机系') AND s.sname LIKE '刘%';
```
写出SQL语句,查询所有学生的成绩单,包括Sno、Sname、Cno、Cname和Degree列
SELECT Student.Sno, Student.Sname, Course.Cno, Course.Cname, Score.Degree
FROM Student
INNER JOIN Score ON Student.Sno=Score.Sno
INNER JOIN Course ON Course.Cno=Score.Cno;
阅读全文