数据库查询连接

1.查询每个学生出生30个月和30个星期后的日期。

格式:DATEADD (日期参数, 数字, 日期) 功能: 

在向指定日期加上一段时间的基础上,返回新的 datetime 值。

日期参数规定了新值的类型。参数有:YearMonthDay、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('数据库')
View Code

 

你可能感兴趣的:(数据库)