1. 创建一个存储过程(名字自定),用于查看所有学生的选课信息,包括学生学号、姓名、院系、课程名字、课程号及成绩。
时间: 2023-08-21 11:02:43 浏览: 69
好的,以下是一个示例的存储过程,可以用于查询所有学生的选课信息:
```sql
CREATE PROCEDURE `GetAllStudentCourseInfo`()
BEGIN
SELECT
s.student_id, s.student_name, s.department, c.course_name, c.course_id, sc.score
FROM
student s
JOIN
student_course sc ON s.student_id = sc.student_id
JOIN
course c ON sc.course_id = c.course_id
ORDER BY
s.student_id ASC;
END
```
这个存储过程会返回所有学生的选课信息,包括学生学号、姓名、院系、课程名字、课程号及成绩。你可以直接调用这个存储过程来获取所需信息。
相关问题
写出每题创建存储过程、执行存储过程的代码: 1.创建一个存储过程(名字自定),用于查看所有学生的选课信息,包括学生学号、姓名、院系、课程名字、课程号及成绩。 2.创建一个存储过程(名字自定),该存储过程的功能为:根据输入的学生姓名,查询学生信息。如果查询不到该学生,则输出“该学生不存在”,否则,输出该学生的学号、姓名、年龄、出生日期、院系信息。 3.创建一个存储过程(名字自定),该存储过程的功能为:根据输入的课程号,查询该课程的平均成绩。执行存储过程时,输出'课程号xx的平均成绩为:xx。提示:创建带输出参数的存储过程:在用户执行存储过程时,通过输出参数可以从存储过程返回值供输出使用。 4.创建一个存储过程(名字自定),用于查看某一个学生所修所有课程的最高分、对应的课程号及该学生学号。如果查找失败,则输出“不存在该学号”,否则输出该学生的成绩。
1. 创建存储过程用于查看所有学生的选课信息:
```
CREATE PROCEDURE view_student_courses
AS
BEGIN
SELECT s.StudentID, s.StudentName, s.Department, c.CourseName, c.CourseID, sc.Score
FROM Student s
JOIN StudentCourse sc ON s.StudentID = sc.StudentID
JOIN Course c ON sc.CourseID = c.CourseID
END
```
执行存储过程的代码:
```
EXEC view_student_courses
```
2. 创建存储过程用于根据输入的学生姓名查询学生信息:
```
CREATE PROCEDURE find_student_by_name
@StudentName NVARCHAR(50)
AS
BEGIN
IF NOT EXISTS (SELECT * FROM Student WHERE StudentName = @StudentName)
BEGIN
PRINT '该学生不存在'
END
ELSE
BEGIN
SELECT StudentID, StudentName, Age, Birthday, Department
FROM Student
WHERE StudentName = @StudentName
END
END
```
执行存储过程的代码:
```
EXEC find_student_by_name '张三'
```
3. 创建存储过程用于根据输入的课程号查询该课程的平均成绩:
```
CREATE PROCEDURE find_avg_score_by_courseid
@CourseID INT,
@AvgScore DECIMAL(5,2) OUTPUT
AS
BEGIN
SELECT @AvgScore = AVG(Score)
FROM StudentCourse
WHERE CourseID = @CourseID
PRINT '课程号' + CONVERT(NVARCHAR(10), @CourseID) + '的平均成绩为:' + CONVERT(NVARCHAR(10), @AvgScore)
END
```
执行存储过程的代码:
```
DECLARE @AvgScore DECIMAL(5,2)
EXEC find_avg_score_by_courseid 1, @AvgScore OUTPUT
```
4. 创建存储过程用于查看某一个学生所修所有课程的最高分、对应的课程号及该学生学号:
```
CREATE PROCEDURE find_student_max_score
@StudentID INT
AS
BEGIN
IF NOT EXISTS (SELECT * FROM Student WHERE StudentID = @StudentID)
BEGIN
PRINT '不存在该学号'
END
ELSE
BEGIN
SELECT TOP 1 sc.CourseID, sc.Score, @StudentID AS StudentID
FROM StudentCourse sc
WHERE sc.StudentID = @StudentID
ORDER BY Score DESC
END
END
```
执行存储过程的代码:
```
EXEC find_student_max_score 1
```
以下给出四个基本表:Student(学生表)的字段按顺序为Sno(学号)、Sname(姓名)、Ssex(性别)、Sage(年龄)、Sdept(所属院系); Course(课程表)的字段按顺序为Cno(课程号)、Cname(课程名)、Cpno(先行课程)、Ccredit(学分);Sc(选课表)的字段按顺序为Sno、Cno、Grade。试用SQL语句表示下列操作。 1.创建视图,通过视图智能查看信息系(IS)男学生的信息(信息包含student表全部字段) 2.查询各个课程号及相应的选课人数。 3.查询每个学生及其选修的课程名和成绩。 4.插入一条记录(99001,张强,男,22,经管系)到学生表中。 5.编写存储过程将学生表中计算机系(CS)学生的年龄都增加1岁。
1. 创建视图:
```sql
CREATE VIEW IS_MALE_STUDENT AS
SELECT *
FROM student
WHERE Sdept = 'IS' AND Ssex = '男';
```
2. 查询各个课程号及相应的选课人数:
```sql
SELECT Cno, COUNT(*) AS num_of_students
FROM sc
GROUP BY Cno;
```
3. 查询每个学生及其选修的课程名和成绩:
```sql
SELECT student.Sno, student.Sname, course.Cname, sc.Grade
FROM student
INNER JOIN sc ON student.Sno = sc.Sno
INNER JOIN course ON sc.Cno = course.Cno;
```
4. 插入一条记录(99001,张强,男,22,经管系)到学生表中:
```sql
INSERT INTO student (Sno, Sname, Ssex, Sage, Sdept)
VALUES ('99001', '张强', '男', '22', '经管系');
```
5. 编写存储过程将学生表中计算机系(CS)学生的年龄都增加1岁:
```sql
CREATE PROCEDURE increase_age_cs_students()
BEGIN
UPDATE student
SET Sage = Sage + 1
WHERE Sdept = 'CS';
END;
```
注意:以上 SQL 语句仅供参考,具体实现可能因数据库类型和版本而异。