本人不做数据库方面开发,但要做个题,请高手指导。
学生表结构:学号(主键)姓名
成绩表结构:学好(主键1)课程号(主键2)成绩
(1)求所有同学所有课程的总分。
(2)写一个针对每个同学计算所有科目平均成绩的存储过程。
(3)构造触发器完成以下功能:当增加一个新同学时,自动在Score表中增加一个学号;当删除某个学生档案时,相应的该学生的成绩记录全部删除。
(4)写一个完整的游标程序,用来提取李斯各门课程的成绩。(SQL语法)另外有一个表包含书名和作者
内容:
书名 作者
book1 author1
book1 author2
写个SQL得到结果
book1 author1,author2
多谢。时间紧迫。给个结果,要分另外开帖给。系统一次只允许给100。
学生表结构:学号(主键)姓名
成绩表结构:学好(主键1)课程号(主键2)成绩
(1)求所有同学所有课程的总分。
(2)写一个针对每个同学计算所有科目平均成绩的存储过程。
(3)构造触发器完成以下功能:当增加一个新同学时,自动在Score表中增加一个学号;当删除某个学生档案时,相应的该学生的成绩记录全部删除。
(4)写一个完整的游标程序,用来提取李斯各门课程的成绩。(SQL语法)另外有一个表包含书名和作者
内容:
书名 作者
book1 author1
book1 author2
写个SQL得到结果
book1 author1,author2
多谢。时间紧迫。给个结果,要分另外开帖给。系统一次只允许给100。
SELECT SUM(成绩) FROM 成绩-- 如果是按学生分的
SELECT A.姓名, 成绩 = SUM(成绩)
FROM 学生 A, 成绩 B
WHERE A.学号 = B.学号
GROUP BY A.姓名--(2)写一个针对每个同学计算所有科目平均成绩的存储过程。
CREATE PRCO dob.p_qry
AS
SELECT A.姓名, 成绩 = AVG(成绩)
FROM 学生 A, 成绩 B
WHERE A.学号 = B.学号
GROUP BY A.姓名--(3)构造触发器完成以下功能:当增加一个新同学时,自动在Score表中增加一个学号;
--当删除某个学生档案时,相应的该学生的成绩记录全部删除。
CREATE TRIGGER tr_insertdelete ON 学生
FOR insert,delete
AS
INSERT 成绩(学号) SELECT 学号 FROM inserted
DELETE A FROM 成绩 A, deleted B
WHERE A.学号 = B.学号
GO--(4)写一个完整的游标程序,用来提取李斯各门课程的成绩。(SQL语法)
DECLARE tb CURSOR LOCAL
FOR
SELECT 课程号, 成绩
FROM 学生 A, 成绩 B
WHERE A.学号 = B.学号
AND A.姓名 = '李斯'
OPEN tb
FETCH tb
WHILE @@FETCH_STATUS = 0
FETCH tb
CLOSE tb
DEALLOCATE tb
2. select 学号,sum(成绩)/3.0 as 平均分 from 成绩表 group by 学号
3.有点疑问,成绩表中(课程号是key),那怎么能只增加个学号呢?
4.为什么要用游标呢?
select A.姓名,B.课程号,B.成绩 from 学生表 A,成绩表 B
where A.学号=B.学号 and A.姓名='李斯'
另外有一个表包含书名和作者
内容:
书名 作者
book1 author1
book1 author2
book2 author3写个SQL得到结果
book1 author1,author2
book2 author3
我不知道把两个作者名字怎么组合啊
create table 表(书名 varchar(20),作者 varchar(20))
insert into 表 select 'book1','author1'
insert into 表 select 'book1','author2'
insert into 表 select 'book2','author1'
go
--创建用户定义函数
create function f_str(@Bookname varchar(20))
returns varchar(8000)
as
begin
declare @ret varchar(8000)
set @ret = ''
select @ret = @ret+','+作者 from 表 where 书名 = @Bookname
set @ret = stuff(@ret,1,1,'')
return @ret
end
go
--执行
select 书名,作者=dbo.f_str(书名) from 表 group by 书名 order by 书名
DECLARE tb CURSOR LOCAL
FOR
SELECT 课程号, 成绩
FROM 学生 A, 成绩 B
WHERE A.学号 = B.学号
AND A.姓名 = '李斯'
OPEN tb
FETCH tb
WHILE @@FETCH_STATUS = 0
FETCH tb
CLOSE tb
DEALLOCATE tb游标循环好像应该是 FETCH NEXT FROM tb