如何用SQL建立一个存储过程查询给定学号的学生的平均成绩,选修课程的门数,以及不合格门数
1个回答
关注
展开全部
CREATE PROCEDURE p_成绩查询 @sno CHAR(9)
AS
SELECT
s.学号,
姓名,
课程名,
分数
FROM 学生表 s, 课程表 c, 成绩表 sc
WHERE s.学号 = sc.学号
AND c.ID = sc.课程ID
AND s.学号 = @sno;
EXECUTE p_成绩查询 '151011029';
注意:以上SQL代码仅为示例,具体实现方式可能因数据库架构和设计而异。
咨询记录 · 回答于2023-12-30
如何用SQL建立一个存储过程查询给定学号的学生的平均成绩,选修课程的门数,以及不合格门数
亲,我很高兴为你服务。使用SQL创建一个存储过程来查询给定学号的学生的平均成绩、选修课程的门数以及不合格门数的方法如下:
CREATE PROCEDURE p_成绩查询 @sno CHAR(9)
AS
SELECT s.学号, 姓名, 课程名, 分数
FROM 学生表 s
JOIN 成绩表 sc ON s.学号 = sc.学号
JOIN 课程表 c ON c.ID = sc.课程ID
WHERE s.学号 = @sno;
执行存储过程:
EXECUTE p_成绩查询 '151011029';
还可以问问题吗
亲,那您问吧我尽量解决您的问题
谢谢你,同样是数据库的题
亲,这个我只能告诉您方法,没有具体的代码:
一、SQL 数据定义语句练习
使用 SQL 语言创建以下表 学生关系模式:S(SNO 、SNAME 、SSEX 、SBIRTHIN 、CLASS)
BEGIN TRANSACTION
INSERT INTO 学生表名
VALUES('1305123345','张玲')
IF @@error=0
BEGIN
INSERT INTO 成绩表名
VALUES(第三)
MSSQL:
首先你的学号在sc的外键必须是 on delete cascade
ALTER TABLE sc
ADD CONSTRAINT fk_test FOREIGN KEY (学号) REFERENCES s(学号) ON DELETE CASCADE
CREATE TRIGGER test
ON s
AFTER DELETE
AS
BEGIN
DELETE FROM sc WHERE 学号 IN (SELECT 学号 FROM deleted)
END
Oracle:
CREATE OR REPLACE TRIGGER test
AFTER DELETE ON s
FOR EACH ROW
BEGIN
DELETE FROM sc WHERE 学号=:old.学号;
END;
SQL语法 DELIMITER |
CREATE TRIGGER `
就是在统计总的选课门数和不及格门数时,我用了group by把不及格门数统计起来了,这个时候总的选课门数就不是所以选门数了,而是不及格门数,我该怎么修改命令啊?
亲,正确无误的写法应该为:
SELECT OperateUser, AccountName, Operatetime, Recorddate, Income, Expense, Balance, Remark
FROM FmAcountOperateRec
GROUP BY 课程号
HAVING COUNT(*) >= 60
ORDER BY 成绩降序;
按课程号进行分组,统计不及格的人数即可:
SELECT 课程号, COUNT(*) AS 人数
FROM 成绩表
WHERE score < 60;
CREATE PROCEDURE p_avg_count_failcount
@sno CHAR(20),
@avg_grade INT OUTPUT,
@total INT OUTPUT,
@failcount INT OUTPUT
AS
BEGIN
SELECT
@avg_grade = AVG(grade),
@total = COUNT(*),
@failcount = COUNT(*)
FROM
student
JOIN
sc ON student.sno = sc.snowhere
WHERE
student.sno = @sno AND grade < 60
GROUP BY
cno;
END;
这段代码创建了一个存储过程p_avg_count_failcount,它接受一个学号作为输入,并返回该学号的学生的课程平均成绩、选修课程门数和不及格门数。这里使用的是SQL语言。不过这段代码中有一些错误和不清晰的地方:
- 连接条件应该是 `student.sno = sc.sno`,而不是 `student.sno = sc.snowhere`。
- `where` 语句的拼写错误,应该是 `where`,而不是 `wherewhere`。
- 注释中使用了中文和表情符号,这可能会影响代码的可读性。建议使用英文和适当的标点符号。
亲,
CREATE PROCEDURE p_成绩查询 @sno CHAR(9)
AS
SELECT s.学号, 姓名, 课程名, 分数
FROM 学生表 s, 课程表 c, 成绩表 sc
WHERE s.学号 = sc.学号
AND c.ID = sc.课程ID
AND s.学号 = @sno
EXECUTE p_成绩查询 '151011029'