用SQL语句创建如下三个基本表:学生表(Student)、课程表(Course)、学生选课表(SC),结构如下所示Student表结构列名说明数据类型约束Sno学号字符串,长度为7主码Sname姓名字符串,长度为10非空Ssex性别字符串,长度为2取‘男’或‘女’Sage年龄整数取值15~45Sdept所在院系字符串,长度为20默认为‘计算机系’CreatetableStudent(Snovarchar(7)primarykey,Snamevarchar(10)notnull,Ssexchar(2)check(Ssex=‘男’orSsex=’女’),Sageintcheck(Sagebetween15and45),Sdeptvarchar(20)default(‘计算机系’))Course表结构列名说明数据类型约束Cno课程号字符串,长度为10主码Cname课程名字符串,长度为20非空Ccredit学分整数取值大于0Semester学期整数取值大于0Period学时整数取值大于0Createtablecourse(Cnovarchar(10)primarykey,Cnamevarchar(20)notnull,Ccreditintcheck(Sctedit0),Semesterintcheck(Semester0),Periodintcheck(Period0))SC表结构列名说明数据类型约束Sno学号字符串,长度为7主码,引用Student的外码Cno课程号字符串,长度为10主码,引用Course的外码Grade成绩整数取值0~100CreatetableSC(Snovarchar(7)foreignkeyreferencesstudent(Sno),Cnovarchar(10)foreignkeyreferencescourse(Cno),Gradeintcheck(Gradebetween0and100),Primarykey(Sno,Cno))1.查询学生选课表中的全部数据。SELECT*FROMSCgo2.查询计算机系学生的姓名、年龄。SelectSname,SageFromStudentWhereSdept=’计算机系’3.查询成绩在70~80分之间的学生的学号、课程号和成绩。SelectSno,Cno,GradeFromCourse,ScWherecourse.cno=sc.Cnoandsc.Gradebetween70and804.查询计算机系年龄在18~20之间且性别为“男”的学生的姓名和年龄。SelectSname,SageFromStudentWhereSagebetween18and20andSsex=’男’andSdept=’计算机系’go5.查询课程号为“C01”的课程的最高分数。Selecttop1Gradeselectmax(Grade)as最高分FromScfromScWhereCno=’C01’whereCno=’C01’OrderbyGradedescorderbyGradedesc6.查询计算机系学生的最大年龄和最小年龄。Selectmax(Sage)as年龄最大,min(Sage)as年龄最小FromStudentWhereSdept=’计算机系’7.统计每个系的学生人数。Selectcount(Sdept)as学生人数,SdeptFromStudentGroupbySdept8.统计每门课程的选课人数和考试最高分。Selectcount(Sno)as选课人数,c.Sno,max(Grade)as最高分FromCoursecleftjoinScsonc.cno=s.CnoGroupbyc.Cno9.统计每个学生的选课门数和考试平均成绩,并按学号的升序显示结果。Selectsno,avg(grade)as’平均成绩’,count(cno)as’选课门数’FromscGroupbysnoOrderbysno10.查询总成绩超过200分的学生,要求列出学号、总成绩。Selectsno,sum(grade)FromscGroupbysnoHavingsum(grade)20011.查询选修了课程“C02”的学生的姓名和所在系。Selectsname,sdeptFromstudents1,scs2Wheres1.sno=s2.snoands2.cno=’c02’12.查询成绩在80分以上的学生的姓名、课程号和成绩,并按成绩的降序排列结果。Selects1.sname,s2.cno,s2.gradeFromstudents1,scs2Wheres1.sno=s2.snoandgrade80Orderbygradedesc13.查询哪些课程没有人选修、要求列出课程号和课程名。Selectc.cno,c.cnameFromcoursecleftjoinscsonc.cno=s.cnoGroupbyc.cno,c.cnameHavingcount(s.sno)=014.用子查询实现如下查询:(1)查询选修了课程“C01”的学生的姓名和所在系。Selectsname,sdept,snoFromstudentWheresnoin(SelectsnoFromscWherecno=’c01’)(2)查询信息系成绩在80分以上的学生的学号、姓名。Selectsno,snameFromstudentWheresdept=’外语系’andsnoin(SelectsnoFromscWheregrade80)(3)查询计算机系考试成绩最高的学生的姓名。Selects1.snamefromstudentsWheresdept=’计算机系’andsnoin(selectsnofromscWheregradein(selectmax(Grade)fromsc))15.删除选课成绩小于50分的学生的选课记录。DeletefromscWheregrade70Select*fromsc—验证16.将所有选修了课程“C01”的学生的成绩加10分:UpdatescSetgrade=grade+10Wherecno=’c01’17.将计算机系所有选修了课程“计算机文化基础”课程的学生的成绩加10分。Select*fromscUpdatescSetgrade=grade+10Wherecnoin(selectcnofromcourseWherecname=’计算机文化基础’)18.创建查询学生的学号、姓名、所在系、课程号、课程名、课程学分的视图。Select*fromcourseSelect*fromstudentsSelect*fromscCreateview学生基本信息AsSelectstudents.sno,sname,sdept,sc.cno,cname,ccreditFromcourse,sc,studentsWherecourse.cno=sc.cnoAndsc.cno=students.sno19.创建查询每个学生的平均成绩的视图,要求列出学生学号及平均成绩。Createviews_avgAsSelectsno,avg(Grade)as平均成绩fromscGroupbysno20.创建查询每个学生的选课学分的视图,要求列出学生学号及总学分。Createviews_scAsSelectstudents.sno,sum(ccredit)as总学分fromStudents,sc,courseWherestudents.sno=sc.snoAndsc.cno=course.cnoGroupbystudents.sno21.用SQL语句创建一个名为f_1的函数,该函数能够求出3到100之间的所有素数之和。Createfunctionf_1()ReturnsintAsBeginDeclare@aint,@bint,@iint,@sumintSet@i=3Set@sum=0While@i101BeginSet@b=0While@a=@i/2BeginIf@i%@a=0BeginSet@b=1BreakEndSet@a=@a+1EndIf@b=0--@b为0说明之前没有比@i小的数字可以把@i整除BeginSet@sum=@sum+@iEndSet@i=@i+1EndReturn@sumEndGoSelectdbo.f_1()22.用SQL语句创建一个名为f_2的函数,该函数能够求出任意两个数的最大值。Createfunctionf_2(@x1int,@x2int)returnsintAsBeginDeclare@maxintIf@x1@x2Return@maxEndSelectdbo.f_2(2,6)23.用SQL语句创建一个名为pro_get_stu_information的存储过程,该存储过程能够根据用户指定的Sno(学号)求出与该学号对应的学生姓名、课程名、成绩。Createprocedurepro_get_stu_information@mchar(6)outputAsSelectsname,cname,gradefromstudents,sc,courseWherestudents.sno=sc.snoandsc.cno=course.cnoandsc.sno=@mExecpro_get_stu_information’0603002’24.为“学生”表创建一个依赖于“学号”的唯一的、非聚集的索引Createuniquenonclusteredindexstu_intonstudents(sno)25.通过游标逐行读取“学生”表的记录Declarestu_curcursorforSelect*fromstudentsforreadonlyOpenstu_curFetchstu_curClosestu_curDeallocatestu_cur