数据库查询连接

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
原文地址:https://www.cnblogs.com/kuugachen/p/3394659.html