sql实验报告10.docx
闽南师范大学实验报告班级学号姓名成绩同组人实验日期2014.1121课程名称:MSSQ1程序设计实验题目:T-SQ1语句的高级应用实验目的与要求1 .掌握多表连接查询、子查询、游标基本概念。2 .掌握多表连接的各种方法,包括内连接、外连接、交叉连接等。3 .掌握子查询的方法,包括相关子查询和不相关子查询。4 .掌握游标处理结果集的基本过程。实验环境的酉己置PC兼容机。Windowxp以上操作系统,SQ1SerVer2005数据库管理系统第4衍闽南师大实验报告1 .查询没有被任何学生选修的课程编号、课程名称和学分。se1ectcourseno,cname,periodfromcoursewherecoursenonotin(se1ectcoursenofromscore)2 .查询C语言,期末成绩比,电子技术,课程期末成绩高的所有学生的学号和姓名。第一种:se1ectStudentno,snamefromstudentwhere(se1ectfina1fromscorejoincourseonscore.courseno=course.coursenowherecname-,Ci,andstudent.studentno-score.Studentno)>(se1ectfina1fromscorejoincourseonscore.courseno-course.coursenowhereCname-,电子技术,andstudent.Studentno=Score.Studentno)第二种:se1ectstudent.studentno.snanefromscorejoinstudentonScore.Studentno=Student.Studentno实脸内容与具体步骤joincourseonscore.courseno=course.coursenowherecname-'C语言,andfina1>(se1ectfina1fromscorejoincourseonscore.courseno-course.coursenowhereCname='甩子技术'andstudent.studentno=score.studentno)第三种se1ecta.student,snamefromscoreazscorebrstudentwherea.studentno=b.Studentnoanda.courseno=(se1ectcoursenofromcoursewhereCname='c语言')andb.courseno=(se1ectcoursenofromcoursewhereCname='电子技术)anda.fina1>b.fina1anda.Studntno=Student.Studentno3 .查询学生的期末成绩比其选修的所有课程的期末平均成绩低的学生学号、课程号和期末成绩。第一种se1ectStudentno,courseno,fina1fromscoreasawherefina1<(se1ectavg(fina1)fromscoreasbwherea.studentnob.Studentno)第二种se1ecta.studentno,a.courseno,a.fina1fromscorea,scorebwherea.studentno=b.studnetnogroupbya.studentno,a.courseno,a.fina1havinga.fina1<avg(b.fina1)第三种se1ectStudentno,courseno,fina1fromscores1whereexists(se1ect*fromscores2wheres1.studentno=s2.studentnogroupbys2.Studetnohavings1.fina1<avg(s2.fina1)4 .查询至少选修了学生0922210009选修的全部课程的学生学号。se1ectdistinctStudentnofromscoreasawherenotexists(se1ect*fromscoreasbwhereStudentno=,0922210009,andnotexists(se1ect*fromscoreascwherea.studentnoc.Studentnoandb.courseno=c.courseno)andStudentno!=,0922210009,5 .查询所有班级期末平均成绩的最高分,并将其赋值给变量,通过print语句输出。dec1arecj2f1oatse1ectcj2=(se1ecttop1avg(fina1)fromscorejoinstudentonscore.Studentnostudent.Studentnogroupbyc1assnoorderbyavg(fina1)desc)printcj26 .使用游标输出学生姓名、选修课程名称和期末考试成绩。dec1arenamenchar(8).cnamenchar(20).fina1f1oatdec1arechengjicursorforame.fina1fromscorejoinstudentonscore.studentno=student.studentnojoincourseoncourse.courseno=score.coursenoopenchengjifetchNEXTfromchengjiintoname,cname.fina1whi1efetch_status-0beginprintname+T+cname+T+cast(fina1asvarchar(8)fetchNEXTfromchengjiintoname,cname,fina1endc1osechengji7 .score表中新增等级字段(修改表添加列)计算学生期末成绩等级(大于等于90为优秀,大于等于80小于90为良好,大于等于70小于80为中等,大于等于60小于70为及格,小于60为不及格),使用游标更新1eve1列第一种:a1tertab1escoreadd1eve1nvarchar(8)dec1areadd1eve1cursorforse1ectStudentno,courseno,fina1fromscoredec1aresnonchar(10).cnonchar(6),fina1f1oatopenadd1eve1fetchNEXTfromadd1eve1intosno,cno.fina1whi1efetch_status-Obeginupdatescoreset1eve1-casewhenfina1>-90then'优秀whenfina1>80then,良好,whenfina1>70then'中等whenfina1>_60then'及格e1se'不及格endwhereStudentno=snoandCoUrSeno=cnofetchNEXTfromadd1eve1intosno,cno,fina1endc1oseadd1eve1实验内容与具体步骤第二种:dec1arefina1numericdec1arecur_scorecursorforse1ectfina1fromscoreforupdateof1eve1openCUjSCorefetchnextfromcur_scoreintofina1whi1efetch_status一Obeginupdatescoreset1eve1=casewhenfina1>-90then'优秀whenfina1>-80then,良好,whenfina1>70then'中等whenfina1>-60then'及格e1se'不及格'endwherecurrentofcur_scorefetchNEXTfromcur_scoreintofina1endc1osecur_scoredea11ocatecur_score注:如果填写内容超出表格,自行添加附页。