(5)查询选修课程一样且成绩相同的学生基本情况,有学生表student,成绩表sc,课程表course,形成简单代码查询
时间: 2024-12-04 14:25:56 浏览: 17
为了查询选修了相同课程并且成绩相同的学生的基本情况,我们需要结合三个表:学生表(student),成绩表(sc),以及课程表(course)。这里我们可以假设每个学生有id,每个课程有id,成绩表中有学生id、课程id以及成绩字段。以下是SQL查询的一个示例:
```sql
SELECT s.id AS student_id, s.name AS student_name, s.age AS student_age
FROM student s
JOIN sc ON s.id = sc.student_id
JOIN course c ON sc.course_id = c.id
GROUP BY s.id, s.name, s.age, c.id, sc.score
HAVING COUNT(DISTINCT sc.course_id) = 1 AND MAX(sc.score) = MIN(sc.score);
```
这个查询的工作原理是:
1. `JOIN` 子句将学生表、成绩表和课程表连接起来,通过学生id和课程id关联数据。
2. `GROUP BY` 根据学生的id、名字、年龄、课程id和成绩进行分组,这样我们就有了每种组合的学生信息。
3. `HAVING` 条件筛选出那些只选修了一门课程,并且这门课的所有成绩都相同的记录。
相关问题
在student、sc和course表中查询和学号为103的学生所选修课程至少有一门相同的学生的学号,课程号和成绩。
这是一个涉及到数据库查询的问题,假设我们有三个相关的表:
1. `student` 表:包含学生的相关信息,如 `id`(学号)等字段。
2. `sc` 表:记录学生选课信息,包括 `sid`(学生ID,关联到 `student.id`)、`cid`(课程ID,关联到 `course.id`)和 `score`(成绩)字段。
3. `course` 表:存储课程数据,如 `id`(课程号)。
要查询和学号为103的学生(`sid = 103`)选修课程至少有一门相同的其他学生的学号、课程号和成绩,你可以构造这样的SQL查询:
```sql
SELECT s1.id AS student_id, c.course_id, c.score
FROM student s1
JOIN sc s1_sc ON s1.id = s1_sc.sid
JOIN course c ON s1_sc.cid = c.id
WHERE s1.id = 103
AND EXISTS (
SELECT 1
FROM sc s2_sc
JOIN course c ON s2_sc.cid = c.id
WHERE s2_sc.sid != s1.id AND s1_sc.cid = s2_sc.cid
)
```
这个查询首先找到学号为103的学生的所有选课(`s1_sc`),然后找出是否有其他学生的课程与其有相同的课程ID(`c`)。如果有,则返回那些学生的学号(`s1.id`)、对应的课程号(`c.course_id`)以及成绩(`c.score`)。
mysql有student表,course表,sc表,查询每个学生选修课成绩大于80分的情况
可以使用如下的 SQL 查询语句来实现:
```
SELECT s.*, c.name as course_name, sc.score
FROM student s, course c, sc
WHERE s.id = sc.sid
AND c.id = sc.cid
AND sc.score > 80;
```
这个查询语句使用了多表联合查询,将学生表、课程表和选课表进行联合查询,筛选出选修课成绩大于80分的记录,并返回学生的信息、课程名称和成绩。
阅读全文