SQL 列出只选修一门课程的学生的学号、姓名、院系及成绩
时间: 2023-08-02 07:06:15 浏览: 221
假设有三个表:学生表(students)、课程表(courses)和成绩表(scores),并且它们之间的关系是学生表和课程表通过成绩表关联起来的。那么,可以使用以下 SQL 语句来列出只选修一门课程的学生的学号、姓名、院系及成绩:
```
SELECT students.id, students.name, students.department, scores.score
FROM students
INNER JOIN scores ON students.id = scores.student_id
WHERE students.id IN (
SELECT student_id
FROM scores
GROUP BY student_id
HAVING COUNT(DISTINCT course_id) = 1
)
```
上述 SQL 语句中,首先使用 INNER JOIN 将学生表和成绩表关联起来,然后筛选出只选修一门课程的学生。这里使用了子查询和 GROUP BY 语句来实现,最后输出学号、姓名、院系和成绩。
相关问题
数据库建立只选修一门课程的学生的学号、姓名、院系及成绩的视图;
好的,您想要知道如何创建一个只选修一门课程的学生的学号、姓名、院系及成绩的视图。这个查询可以使用 SQL 语言来实现。首先,您需要在数据库中有一个表格,其中包含学生的学号、姓名、院系和成绩。然后,您可以使用以下 SQL 查询来创建视图:
```sql
CREATE VIEW one_course_view AS
SELECT student_id, name, department, grade
FROM student_table
GROUP BY student_id
HAVING COUNT(course) = 1;
```
这个视图将会返回只选修了一门课程的学生的学号、姓名、院系及其成绩。请注意,这个视图是基于一个假设,即每个学生只选修了一门课程,如果有学生选择了多门课程,那么该视图将无法正确地显示这些数据。
用sql sever首先创建学生信息表(学号,姓名,性别,年龄,院系)和课程信息表(课程号,课程名,课程学分)以及学生课程信息表(学号,课程号,成绩) 之后创建一个用户自定义函数,使用上述三个表,功能为产生一张有关学生成绩统计的报表。该报表显示每一门课程的课程号、课程名、选修人数、本门最高分、最低分和平均分。调用这个函数,生成相应的报表并给用户浏览。(多语句表值函数)
好的,我可以帮你解答这个问题。以下是 SQL Server 中创建该报表的用户自定义函数的示例代码:
```
CREATE FUNCTION fn_GenerateGradeReport()
RETURNS @ReportTable TABLE (
CourseID INT,
CourseName VARCHAR(50),
Enrollment INT,
MaxGrade DECIMAL(5,2),
MinGrade DECIMAL(5,2),
AvgGrade DECIMAL(5,2)
)
AS
BEGIN
INSERT INTO @ReportTable (CourseID, CourseName, Enrollment, MaxGrade, MinGrade, AvgGrade)
SELECT
c.CourseID,
c.CourseName,
COUNT(sc.StudentID) AS Enrollment,
MAX(sc.Grade) AS MaxGrade,
MIN(sc.Grade) AS MinGrade,
AVG(sc.Grade) AS AvgGrade
FROM
Course c
LEFT JOIN StudentCourse sc ON c.CourseID = sc.CourseID
GROUP BY
c.CourseID,
c.CourseName
RETURN
END
```
其中,上述代码假设已经创建了学生信息表 Student,课程信息表 Course 和学生课程信息表 StudentCourse,且它们之间的关系是:
- 学生信息表 Student:StudentID (学号), StudentName (姓名), Gender (性别), Age (年龄), Department (院系)
- 课程信息表 Course:CourseID (课程号), CourseName (课程名), Credit (课程学分)
- 学生课程信息表 StudentCourse:StudentID (学号), CourseID (课程号), Grade (成绩)
函数 fn_GenerateGradeReport() 利用多表联结和聚合函数,计算每门课程的选修人数、最高分、最低分和平均分,并将结果插入到表值变量 @ReportTable 中。最后,函数返回 @ReportTable,用户可以通过查询该表值变量来查看报表。
调用该函数的语句如下所示:
```
SELECT * FROM fn_GenerateGradeReport()
```
当你执行该语句时,将会生成一张包含每门课程的课程号、课程名、选修人数、本门最高分、最低分和平均分的报表,并将其返回给用户供其浏览。
阅读全文