创建一个存储过程,查看001号课程的选修情况,包括学生学号、姓名和成绩,建立完存储过程后测试该存储过程;
时间: 2023-07-04 20:30:32 浏览: 115
好的,以下是创建该存储过程的 SQL 代码:
```
CREATE PROCEDURE view_course_001()
BEGIN
SELECT student.id, student.name, sc.score
FROM student
INNER JOIN sc ON student.id = sc.id
WHERE sc.course_id = '001';
END
```
该存储过程使用了 INNER JOIN 语句来连接 student 和 sc 表,通过 WHERE 条件查询课程编号为 '001' 的选修情况,并返回学生学号、姓名和成绩。
接下来是测试该存储过程的代码:
```
CALL view_course_001();
```
执行该代码后,就可以看到选修了课程 '001' 的学生学号、姓名和成绩了。
相关问题
1.利用T-SQL语句创建一个带有输入参数的存储过程ProcInsert,向Score表中插入一条记录(带4个参数:学号、课程号、平时成绩、期末成绩),并查询该学生的姓名、选修的所有课程名称,平时成绩和期末成绩(根据录入的学号查询,存储过程只有输入参数,以结果集的形式返回数据)。创建完后调用该存储过程。 2.利用T-SQL语句创建一个带有参数的存储过程P_Clnum,要求能够根据用户给定的班级号,统计该班级的人数,并将统计好的人数输出返回给用户。创建完后调用该存储过程。 3.创建完后调用该存储过程SQL语句创建一个存储过程ProcAvg,查询指定班级指定课程的平均分。班级号和课程名称由输入参数给定,计算出的平均分通过输出参数返回。若该存储过程已存在,则删除后重建。创建完后请调用该存储过程。 4.使用系统存储过程sp_helptext查看存储过程;使用系统存储过程重命名存储过程;使用DROP PROCEDURE命令删除存储过程。
1. 创建带有输入参数的存储过程ProcInsert:
```sql
CREATE PROCEDURE ProcInsert
@studentId VARCHAR(20),
@courseId VARCHAR(20),
@usualScore FLOAT,
@finalScore FLOAT
AS
BEGIN
INSERT INTO Score(StudentID, CourseID, UsualScore, FinalScore)
VALUES(@studentId, @courseId, @usualScore, @finalScore);
SELECT Student.Name, Course.CourseName, Score.UsualScore, Score.FinalScore
FROM Student
INNER JOIN Score ON Student.StudentID = Score.StudentID
INNER JOIN Course ON Course.CourseID = Score.CourseID
WHERE Student.StudentID = @studentId
END;
```
调用存储过程:
```sql
EXEC ProcInsert 'S001', 'C001', 80.5, 85.0;
```
2. 创建带有参数的存储过程P_Clnum:
```sql
CREATE PROCEDURE P_Clnum
@classId VARCHAR(20),
@num INT OUTPUT
AS
BEGIN
SELECT @num = COUNT(*) FROM Student WHERE ClassID = @classId;
SELECT @num;
END;
```
调用存储过程:
```sql
DECLARE @num INT;
EXEC P_Clnum 'C001', @num OUTPUT;
PRINT 'C001班级的人数为:' + CAST(@num AS VARCHAR);
```
3. 创建存储过程ProcAvg:
```sql
IF OBJECT_ID('ProcAvg', 'P') IS NOT NULL
DROP PROCEDURE ProcAvg;
GO
CREATE PROCEDURE ProcAvg
@classId VARCHAR(20),
@courseName VARCHAR(20),
@avgScore FLOAT OUTPUT
AS
BEGIN
SELECT @avgScore = AVG(Score) FROM
(
SELECT Score.FinalScore AS Score
FROM Student
INNER JOIN Score ON Student.StudentID = Score.StudentID
INNER JOIN Course ON Course.CourseID = Score.CourseID
WHERE Student.ClassID = @classId AND Course.CourseName = @courseName
) A;
END;
```
调用存储过程:
```sql
DECLARE @avgScore FLOAT;
EXEC ProcAvg 'C001', '数学', @avgScore OUTPUT;
PRINT 'C001班级数学平均分为:' + CAST(@avgScore AS VARCHAR);
```
4. 使用系统存储过程sp_helptext查看存储过程:
```sql
EXEC sp_helptext 'ProcAvg';
```
使用系统存储过程重命名存储过程:
```sql
EXEC sp_rename 'dbo.ProcAvg', 'ProcAverage';
```
使用DROP PROCEDURE命令删除存储过程:
```sql
DROP PROCEDURE ProcAverage;
```
利用sql server语言创建一个学生管理系统数据库,包括学生表stu(学号,姓名,性别,年龄,系别),课程表course(课程号,课程名,开课地点,任课老师),选课表score(学号,课程号,成绩),教师表teacher(教师编号,教师姓名,职称)和教授表teaching(课程号,教师编号,开课时间,开课地点),同时插入数据,再创建上述表的触发器和存储过程
好的,以下是创建学生管理系统数据库的 SQL 语句:
```
--创建学生表stu
CREATE TABLE stu (
sno CHAR(10) PRIMARY KEY,
sname VARCHAR(20),
sgender VARCHAR(2),
sage INT,
sdept VARCHAR(20)
)
--创建课程表course
CREATE TABLE course (
cno CHAR(10) PRIMARY KEY,
cname VARCHAR(20),
clocation VARCHAR(20),
cteacher VARCHAR(20)
)
--创建选课表score
CREATE TABLE score (
sno CHAR(10),
cno CHAR(10),
grade INT,
PRIMARY KEY (sno, cno),
FOREIGN KEY (sno) REFERENCES stu(sno),
FOREIGN KEY (cno) REFERENCES course(cno)
)
--创建教师表teacher
CREATE TABLE teacher (
tno CHAR(5) PRIMARY KEY,
tname VARCHAR(20),
ttitle VARCHAR(20)
)
--创建教授表teaching
CREATE TABLE teaching (
cno CHAR(10),
tno CHAR(5),
ctime VARCHAR(20),
clocation VARCHAR(20),
PRIMARY KEY (cno, tno),
FOREIGN KEY (cno) REFERENCES course(cno),
FOREIGN KEY (tno) REFERENCES teacher(tno)
)
--插入数据
INSERT INTO stu VALUES ('20190001', '张三', '男', 20, '计算机科学与技术');
INSERT INTO stu VALUES ('20190002', '李四', '女', 21, '软件工程');
INSERT INTO stu VALUES ('20190003', '王五', '男', 22, '信息安全');
INSERT INTO course VALUES ('C001', '数据库原理', '教学楼101', '张老师');
INSERT INTO course VALUES ('C002', '算法设计与分析', '教学楼201', '李老师');
INSERT INTO course VALUES ('C003', '操作系统', '教学楼301', '王老师');
INSERT INTO score VALUES ('20190001', 'C001', 90);
INSERT INTO score VALUES ('20190001', 'C002', 85);
INSERT INTO score VALUES ('20190002', 'C001', 92);
INSERT INTO score VALUES ('20190002', 'C002', 88);
INSERT INTO score VALUES ('20190003', 'C003', 80);
INSERT INTO teacher VALUES ('T001', '张老师', '副教授');
INSERT INTO teacher VALUES ('T002', '李老师', '教授');
INSERT INTO teacher VALUES ('T003', '王老师', '讲师');
INSERT INTO teaching VALUES ('C001', 'T001', '周一上午', '教学楼101');
INSERT INTO teaching VALUES ('C002', 'T002', '周三下午', '教学楼201');
INSERT INTO teaching VALUES ('C003', 'T003', '周五上午', '教学楼301');
```
接下来是触发器和存储过程的创建:
```
--创建插入学生表stu的触发器
CREATE TRIGGER insert_stu_trigger
ON stu
FOR INSERT
AS
BEGIN
PRINT 'A new record has been inserted into the stu table.'
END
--创建更新教授表teaching的触发器
CREATE TRIGGER update_teaching_trigger
ON teaching
FOR UPDATE
AS
BEGIN
PRINT 'The teaching table has been updated.'
END
--创建查询选修某门课程的学生的存储过程
CREATE PROCEDURE get_students_by_course
@cno CHAR(10)
AS
BEGIN
SELECT s.sno, s.sname, s.sdept, sc.grade
FROM score sc
JOIN stu s ON sc.sno = s.sno
WHERE sc.cno = @cno
END
```
以上就是创建学生管理系统数据库的 SQL 语句,包括表的创建、数据的插入、触发器的创建和存储过程的创建。
阅读全文