在mysql中查询学生的姓名、课程名称和成绩
时间: 2024-02-01 10:16:26 浏览: 32
假设有以下三张表:
- 学生表 student,包含字段:id(学生编号)、name(学生姓名);
- 课程表 course,包含字段:id(课程编号)、name(课程名称);
- 成绩表 score,包含字段:id(成绩编号)、student_id(学生编号)、course_id(课程编号)、score(成绩)。
则可以使用以下 SQL 语句查询学生的姓名、课程名称和成绩:
```
SELECT
student.name AS '学生姓名',
course.name AS '课程名称',
score.score AS '成绩'
FROM
score
INNER JOIN student ON score.student_id = student.id
INNER JOIN course ON score.course_id = course.id;
```
其中,`INNER JOIN` 表示内连接,将三张表按照指定的字段连接起来;`AS` 表示给字段起别名,方便查看结果。
相关问题
mysql查询平均成绩大于85的学生姓名和平均成绩
假设学生成绩信息存储在名为`scores`的表中,该表包含学生姓名`name`、学号`student_id`、课程名称`course`和分数`score`四个字段,可以使用以下SQL查询语句来查询平均成绩大于85的学生姓名和平均成绩:
```
SELECT name, AVG(score) AS avg_score
FROM scores
GROUP BY student_id
HAVING AVG(score) > 85;
```
该查询语句中,首先使用`GROUP BY`子句将成绩表按照学生进行分组,以便计算每个学生的平均成绩。然后使用`HAVING`子句过滤出平均成绩大于85分的学生记录,并使用`SELECT`子句选择对应的姓名和平均成绩列进行显示。
需要注意的是,由于需要计算平均成绩,查询中使用`AVG()`聚合函数来求每个学生的平均成绩。同时,在`SELECT`子句中使用`AS`关键字来给计算结果起一个别名,以便更好地显示结果。
mysql查询每门课程成绩最好的前两名学生姓名
假设学生的成绩信息存储在名为`scores`的表中,该表中包含学生姓名`name`、课程名称`course`和分数`score`三个字段,可以使用以下SQL查询语句来查询每门课程成绩最好的前两名学生姓名:
```
SELECT course, name, score
FROM (
SELECT course, name, score,
@rank := IF(@prev_course = course,
IF(@prev_score = score, @rank, @rank + 1), 1) AS rank,
@prev_course := course,
@prev_score := score
FROM scores
ORDER BY course, score DESC
) AS ranked_scores
WHERE rank <= 2;
```
该查询语句中,首先使用`ORDER BY`子句对成绩表进行排序,以便按照课程和分数对每个学生的成绩进行排名。然后使用`@prev_course`和`@prev_score`变量来跟踪上一个课程和分数的值,以便在当前课程或分数与上一个不同时,重新设置排名变量`@rank`的值。最后,在嵌套查询中,筛选出排名前两名的学生记录,并使用`SELECT`子句选择对应的课程、姓名和分数进行显示。
需要注意的是,如果有多个学生在同一门课程中取得了相同的最高分数,这些学生都将被列为该门课程的前两名。如果需要按照某种规则进一步筛选出前两名学生,可以在内部查询中添加额外的过滤条件。