查询所有3个学分课程中有3门以上(含3门)课程获80分以上(含80分)的学生的姓名。
时间: 2023-08-12 17:18:59 浏览: 35
好的,根据您的要求,我可以为您提供如下SQL查询语句来实现:
```
SELECT s.name
FROM student s, score sc, course c
WHERE s.sid = sc.sid AND sc.cid = c.cid AND c.credit = 3 AND sc.score >= 80
GROUP BY s.sid, s.name
HAVING COUNT(*) >= 3;
```
解释一下这个查询语句的含义:
首先,我们使用 `FROM` 子句将 `student`(学生表)、`score`(成绩表)和 `course`(课程表)这三个表连接起来。
然后,我们使用 `WHERE` 子句来筛选出课程学分为3的课程,并且成绩大于等于80分的学生所对应的记录。
接着,我们使用 `GROUP BY` 子句来对学生的姓名进行分组。这里我们同时对学生的 `sid` 和 `name` 进行分组,是为了避免可能会出现同名学生的情况。
最后,我们使用 `HAVING` 子句来过滤出选修了3门及以上课程且成绩大于等于80分的学生,并且只返回这些学生的姓名。
希望这个查询语句能够帮到您!
相关问题
sql查询选修课程2门以上且成绩都在80分以上的学生姓名,专业,总学分
好的,针对你的补充要求,我们可以在之前的 SQL 语句的基础上进行一些改进,以得到选修课程 2 门以上且成绩都在 80 分以上的学生的姓名、专业和总学分信息。具体的 SQL 语句如下:
```
SELECT s.student_name, s.major, SUM(c.credit) AS total_credit
FROM student s, course c, student_course sc
WHERE s.student_id = sc.student_id
AND c.course_id = sc.course_id
AND c.course_name IN (
SELECT course_name
FROM student_course
WHERE score >= 80
GROUP BY course_name
HAVING COUNT(*) >= 2
)
AND sc.score >= 80
GROUP BY s.student_name, s.major
HAVING COUNT(DISTINCT c.course_name) >= 2
```
解释一下这个 SQL 语句:
首先,我们需要从 student_course 表中找到所有成绩大于等于 80 分的课程,并且这些课程的选修人数不少于 2 人。这部分代码与之前的 SQL 语句是一样的。
接下来,我们需要从 student_course 表中筛选出所有选修了这些课程的学生,并且这些学生选修的课程数目不少于 2 门。为了实现这个目标,我们在之前的 SQL 语句的基础上增加了一个筛选条件,即选修课程数目不少于 2 门。
最后,我们需要在 student、course 和 student_course 三个表中联合查询,以获取每个学生的姓名、专业和总学分信息。具体地,我们使用了 INNER JOIN 子句将这三个表联合起来,并且使用了 GROUP BY 子句和 SUM 函数来计算每个学生的总学分。
最终,我们得到的结果是所有选修了至少 2 门成绩都在 80 分以上的课程的学生的姓名、专业和总学分信息。
查询选修了1门且平均分在80分以下课程的学生的学号。
假设你有两个表:一个学生表(student)和一个课程表(course)。 学生表包含学生的信息,包括学生的学号和姓名。 课程表包含课程的信息,包括课程编号,课程名称和学分。 还有一个选课表(score),其中包含学生的选课信息,包括学生的学号,课程编号和分数。可以使用以下SQL查询来找到选修了1门且平均分在80分以下课程的学生的学号:
```
SELECT student.id
FROM student
INNER JOIN score ON student.id = score.student_id
GROUP BY student.id
HAVING COUNT(DISTINCT score.course_id) = 1 AND AVG(score.score) < 80;
```
这个查询将返回选修了1门且平均分在80分以下课程的学生的学号列表。