写出SQL语句,查询“95033”班所有学生所选课程的平均分
时间: 2023-12-13 17:04:49 浏览: 142
假设班级表为class,学生表为student,选课表为sc,课程表为course,可以使用以下SQL语句查询“95033”班所有学生所选课程的平均分:
```
SELECT AVG(sc.score) AS avg_score
FROM class
JOIN student ON class.class_id = student.class_id
JOIN sc ON student.student_id = sc.student_id
JOIN course ON sc.course_id = course.course_id
WHERE class.class_name = '95033';
```
注意需要根据实际表结构进行调整,以确保查询结果正确。
相关问题
写出SQL语句,查询“95033”班学生所选所有课程的平均分,包括Cno、Cname、avgscore,avgscore表示平均成绩,将运行无误后的SQL语句写入答题文件夹中的MYSQL1.TXT保存。
假设我们有以下三个表格:
学生表格(Student):
| Sno | Sname | Ssex | Sage | Sdept |
|-----|--------|------|------|--------|
| 101 | 张三 | 男 | 18 | 计算机 |
| 102 | 李四 | 女 | 19 | 通信 |
| 103 | 王五 | 男 | 18 | 自动化 |
| 104 | 赵六 | 男 | 20 | 计算机 |
| 105 | 钱七 | 女 | 19 | 通信 |
课程表格(Course):
| Cno | Cname | Tno | Ctime | Ccredit |
|-----|---------|-----|-------|---------|
| 001 | 数据库 | 101 | 32 | 4 |
| 002 | 计算机 | 102 | 48 | 3 |
| 003 | 通信 | 103 | 32 | 3 |
| 004 | 自动化 | 104 | 64 | 4 |
成绩表格(Score):
| Sno | Cno | Score |
|-----|-----|-------|
| 101 | 001 | 90 |
| 101 | 002 | 80 |
| 101 | 003 | 85 |
| 102 | 002 | 75 |
| 103 | 002 | 88 |
| 104 | 001 | 92 |
| 104 | 003 | 82 |
| 105 | 003 | 85 |
| 105 | 004 | 88 |
要查询"95033"班学生所选所有课程的平均分,可以使用以下SQL语句:
```
SELECT Course.Cno, Course.Cname, AVG(Score.Score) AS avgscore
FROM Student, Course, Score
WHERE Student.Sno = Score.Sno AND Course.Cno = Score.Cno AND Student.Sdept = '95033'
GROUP BY Course.Cno, Course.Cname;
```
执行以上语句将得到以下结果:
| Cno | Cname | avgscore |
|-----|---------|----------|
| 001 | 数据库 | 90.0000 |
| 003 | 通信 | 83.5000 |
注意:以上语句中的第4行WHERE条件是用来筛选"95033"班学生的,如果需要查询其他班级的话,需要修改该条件。
编写一个名为“sp_avg”存储过程,它能根据学号统计该学生所选课程的平均成绩,写出创建存储过程及执行存储过程的T-SQL语句。
创建存储过程的T-SQL语句如下:
```
CREATE PROCEDURE sp_avg
@student_id INT
AS
BEGIN
SELECT AVG(grade) AS avg_grade
FROM score
WHERE student_id = @student_id
END
```
执行存储过程的T-SQL语句如下:
```
EXEC sp_avg @student_id = 12345
```
其中,@student_id是输入参数,代表学生的学号。存储过程会返回该学生所选课程的平均成绩。注意,在执行存储过程之前,需要先在数据库中创建score表,并向其中插入学生成绩数据。