1.查询每个学生出生30个月和30个星期后的日期。
格式:DATEADD (日期参数, 数字, 日期) 功能:
在向指定日期加上一段时间的基础上,返回新的 datetime 值。
日期参数规定了新值的类型。参数有:Year、Month、Day、Week、Hour
select s.姓名,s.出生日期,dateadd(MONTH,30,s.出生日期)as newmonth,
DATEADD(week,30,s.出生日期)as newweek from s
2.创建一个视图,如果某个学生所有课程成绩的平均分小于60,那么设置奖学金类
型为“三等奖”;如果大于或等于90,则设置奖学金类型为“一等奖”;
其余设置为“二等奖”。
create view view_jiangxuejin
as select sc.学号,AVG(SC.成绩) as 平均成绩,类型=
case
when AVG(SC.成绩)<60 then '三等奖'
when AVG(SC.成绩)>=90 then '一等奖'
when AVG(SC.成绩)>=60 and AVG(SC.成绩)<90 then '二等奖'
end
from SC group by sc.学号
3.建立视图,要求显示学生的学号和课程“数据结构”的成绩
,如果学生没有选修此课程,则显示“没有成绩”信息。
create view Stud(学号,成绩)
as select distinct s.学号,grade=
case
when exists(select SC.课程号 from SC
where SC.学号=s.学号 and SC.课程号=(
select c.课程号 from c where c.课程号='数据结构'))
then CAST(SC.成绩 as CHAR(4))
else '没有成绩'
end
from s left outer join SC on
s.学号=SC.学号 and SC.课程号=
(select c.课程号 from c where c.课程名='数据结构')
4.建立一自定义函数,要求能够显示某个同学选修某门课程的
成绩,如果某个同学没有选修某门课程,则显示“某某同学没有选
修某某课程”,例如:陈小红同学没有选修数据结构。
create function f_grade1(@xm char(10),@kcm char(20))
returns char(50)as
begin
declare @grade int
set @grade=(select 成绩 from s,sc,c where s.学号=sc.学号 and sc.课程号
=c.课程号 and 姓名=@xm and 课程名=@kcm)
if @grade is null
begin
return rtrim(@xm)+'没有选修'+@kcm
end
return @grade
end
select dbo.f_grade1('马俊萍','C++')
5.为学生基本信息表S中男同学的行声明游标,并使用FETCH NEXT逐个提取这些行。
declare cursor_boy cursor
scroll
for
select * from s where s.性别='男'
open cursor_boy
fetch next from cursor_boy
while @@FETCH_STATUS=0
begin
fetch next from cursor_boy
end
close cursor_boy
deallocate cursor_boy
6.建立标量函数course_stdevp,计算某门课程所有学生的成绩标准差、平均成绩;
并利用这些函数,计算课程“数据库”成绩的标准差,平均成绩。使用函数course_stdevp,
建立数据表c_g,要求包合课程名及相应课程的成绩标准差、平均成绩。
--计算平均成绩
create function course_stdevp1(@cname char(20))
returns int
as
begin
declare @avggrade int
set @avggrade=(select avg(成绩) from sc,c where
sc.课程号=c.课程号 and 课程名=@cname)
return @avggrade
end
--计算标准差
create function course_stdevp2(@cname char(20))
returns int
as
begin
declare @stdegrade int
set @stdegrade=(select stdevp(成绩)from sc,c where
sc.课程号=c.课程号 and 课程名=@cname)
return @stdegrade
end
delete
create table c_g1
(课程名 char(20),平均成绩 as dbo.course_stdevp1(课程名),标准差 as dbo.course_stdevp2(课程名))
select * from c_g1
select dbo.course_stdevp2('数据库')
select dbo.course_stdevp1('数据库')