在MySQL中,如何查询那些与学号为103的学生有共同选修课程并且至少一门课程成绩相同的其他学生的详细信息,包括他们的学号、课程号以及成绩?
时间: 2024-10-19 10:15:58 浏览: 143
在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子句筛选出至少一门成绩相同的其他学生。
相关问题
MYSQL语句 成绩表包括所选课程和学生学号 每个学生可以选一门或多门课程 求至少同时选修课程1和课程2的学时的学号
在MySQL中,你可以使用`INNER JOIN`和`GROUP BY`以及`HAVING`来查询至少同时选修课程1和课程2的学生及其学时。假设你的成绩表名为`scores`,有`student_id`(学生ID)、`course_id`(课程ID)和`credit_hours`(学时)字段,那么SQL语句可能如下:
```sql
SELECT s.student_id, SUM(s.credit_hours) as total_hours
FROM scores s
WHERE s.course_id IN (1, 2)
GROUP BY s.student_id
HAVING COUNT(DISTINCT s.course_id) = 2;
```
这个查询做了以下几件事:
1. `WHERE s.course_id IN (1, 2)` 筛选出课程ID为1或2的成绩记录。
2. `GROUP BY s.student_id` 将结果按学生ID分组。
3. `SUM(s.credit_hours)` 计算每个学生的总学时。
4. `HAVING COUNT(DISTINCT s.course_id) = 2` 验证每个学生是否有两门不同的课程记录。
mysql中查询只选修了一门课程的全部学生的学号和姓名的命令
在MySQL中,要查询只选修了一门课程的全部学生的学号和姓名,我们需要进行几个步骤的操作。首先,假设我们有一个`students`表,里面包含学生的学号(student_id)和姓名(student_name),还有一个`courses`表,里面包含课程的课程号(course_id),以及一个`enrollments`表,表示学生选课的情况,包含学生学号(student_id)和课程号(course_id)。以下是查询只选修了一门课程的全部学生的SQL命令:
```sql
SELECT s.student_id, s.student_name
FROM students s
WHERE NOT EXISTS (
SELECT 1
FROM enrollments e1
WHERE e1.student_id = s.student_id
GROUP BY e1.student_id
HAVING COUNT(e1.course_id) > 1
);
```
这条SQL语句的逻辑是这样的:
1. 选择`students`表中的学生信息(学号和姓名)。
2. 对于每一个学生,使用`NOT EXISTS`子查询来判断是否存在另一个选修课程的情况。
3. 在`NOT EXISTS`子查询中,通过`GROUP BY e1.student_id`对每个学生选修的课程数量进行分组,并通过`HAVING COUNT(e1.course_id) > 1`来判断是否存在选修超过一门课程的情况。
4. 如果不存在这样的情况(即`NOT EXISTS`为真),则意味着该学生只选修了一门课程,其信息将被选出。
阅读全文