mysql查询不同课程但成绩相同的学号,课程号,成绩
时间: 2023-07-13 10:16:57 浏览: 341
假设学生成绩信息存储在名为`scores`的表中,该表包含学号`student_id`、课程号`course_id`和分数`score`三个字段,可以使用以下SQL查询语句来查询不同课程但成绩相同的学号、课程号和成绩:
```
SELECT s1.student_id, s1.course_id, s1.score
FROM scores s1
INNER JOIN scores s2 ON s1.score = s2.score AND s1.student_id < s2.student_id
WHERE s1.course_id <> s2.course_id;
```
该查询语句中,首先使用自连接将成绩表与自身连接起来,以便比较不同课程的成绩是否相同。然后使用`WHERE`子句过滤出成绩相同但课程不同的学生记录,并使用`SELECT`子句选择对应的学号、课程号和成绩列进行显示。
需要注意的是,为了避免重复结果,查询中使用`s1.student_id < s2.student_id`来限制只显示学号较小的一方。如果不加这个限制,每个匹配的成绩对都将被重复显示两次。
相关问题
MySQL查询课程不同、成绩相同的学生的学号、课程号和成绩。使用WHERE子句定义连接条件的隐式语法结构。
在MySQL中,你可以使用子查询和`DISTINCT`关键字结合`WHERE`子句来找出课程不同但成绩相同的学生。假设我们有两个表,一个是`students`(包含学生的学号`student_id`),另一个是`scores`(包含学生学号`student_id`和课程号`course_id`以及成绩`score`)。下面是一个示例查询:
```sql
SELECT s1.student_id, si.course_id, si.score
FROM students s1
JOIN (
SELECT DISTINCT score, course_id
FROM scores
) si
ON s1.student_id = si.student_id
WHERE s1.student_id NOT IN (
SELECT student_id
FROM scores
GROUP BY score, course_id
HAVING COUNT(DISTINCT course_id) > 1
);
```
这个查询首先找到每个成绩唯一的课程组合(`si`子查询),然后在`students`表中查找对应的学生学号。`NOT IN`部分排除了那些在一个成绩下有多个课程的学生。
在MySQL中,如何查询那些与学号为103的学生有共同选修课程并且至少一门课程成绩相同的其他学生的详细信息,包括他们的学号、课程号以及成绩?
在MySQL中,你可以使用子查询和JOIN语句来解决这个问题。首先假设我们有两个表,一个是`students`表,包含`student_id`(学号)等基本信息,另一个是`courses`表,包含`student_id`, `course_id` 和 `score` 等字段,表示学生选课及成绩。
以下是SQL查询的基本结构:
```sql
SELECT s1.student_id AS '其他学生的学号', c.course_id, c.score
FROM students s1
JOIN (
SELECT student_id, course_id, score
FROM courses
WHERE student_id = 103 -- 学号为103的学生
) s2 ON s1.student_id = s2.student_id
JOIN courses c1 ON s1.student_id = c1.student_id AND c1.course_id = s2.course_id
GROUP BY s1.student_id, c.course_id, c1.score
HAVING COUNT(*) >= 1 -- 至少有一门成绩相同
```
这个查询的工作原理是首先找到学号为103的学生的所有课程(子查询s2),然后查找所有选了相同课程并有相同成绩的学生(JOIN到c1)。最后,通过GROUP BY和HAVING子句筛选出至少一门成绩相同的其他学生。
阅读全文