1**大学实验报告学院:专业:班级:姓名学号实验组1实验时间指导教师成绩实验项目名称实验三:数据库的嵌套查询实验目的使学生进一步掌握SQLServer查询分析器的使用方法,加深对SQL语言的嵌套查询语句的理解。实验要求本实验属于验证型实验,通过实验,加强对课堂讲授知识的理解。开始实验前,必须进行预习,写出实现所有查询要求的SQL语句。实验过程中,先集中由老师进行具体要求和注意事项的讲解,然后各自独立在机器上完成实验。实验过程中出现问题,在实验指导老师帮助下解决。实验原理将查询要求用SQL语句表示;在SQLServer查询分析器的输入区中输入SQL查询语句;设置查询分析器的结果区StandardExecute(标准执行)或ExecutetoGrid(网格执行)方式;发布执行命令,并在结果区中查看结果;如果结果不正确,要进行修改,直到正确为止。实验仪器(1)硬件条件:个人计算机。(2)软件条件:Windows2000NTServer;MSSQLServer2000。实验步骤在SQLServer查询分析器中使用IN、比较符、ANY或ALL和EXISTS操作符进行嵌套查询操作。1、基本操作实验用SQL语句表示,在学生选课库中实现其数据嵌套查询操作。(1)求选修了高等数学的学生学号和姓名。(2)求C1课程的成绩高于张三的学生学号和成绩。(3)求其它系中年龄小于计算机系年龄最大者的学生。(4)求其它系中比计算机系学生年龄都小的学生。2(5)求选修了C2课程的学生姓名。(6)求没有选修C2课程的学生姓名。(7)查询选修了全部课程的学生姓名。(8)求至少选修了学号为“S2“的学生所选修的全部课程的学生学号和姓名。2、提高操作实验对自设计的数据库应用项目的数据查询操作分类,用SQL语句表示其中的简单、连接和嵌套查询,并通过SQLServer查询分析器实现其查询操作。实验内容usemastergoifexists(select*fromsysdatabaseswherename='StuCourseDb')dropdatabaseStuCourseDbgocreatedatabaseStuCourseDbgo--切换数据库useStuCourseDbgo--建学生表ifexists(select*fromsysobjectswherename='Student')droptableStudentgocreatetableStudent(Snovarchar(50)primarykey,Snamevarchar(50),Sgenderchar(10)check(Sgender='男'orSgender='女'),Sagesmallintcheck(Sagebetween10and70),Sdeptvarchar(50));go--建课程表ifexists(select*fromsysobjectswherename='Course')droptableCoursego3createtableCourse(Cnovarchar(50)primarykey,Cnamevarchar(50),Cpnovarchar(50),CreditSmallint)--建选课表ifexists(select*fromsysobjectswherename='SC')droptableSCgocreatetableSC(Snovarchar(50),Cnovarchar(50),GradeSmallint,primarykey(Sno,Cno),)altertableSCaddconstraintFK_SC_Studentforeignkey(Sno)referencesStudent(Sno)altertableSCaddconstraintFK_SC_Courseforeignkey(Cno)referencesCourse(Cno)insertintoStudentselect'200215121','李勇','男',20,'CS'unionselect'200215122','刘晨','女',19,'CS'unionselect'200215123','王明','女',20,'CS'unionselect'200215124','张力','男',20,'MA'unionselect'200215125','李小','女',19,'IS'unionselect'200215126','杜绝','男',20,'CS'unionselect'200215127','张瑟','女',20,'MA'unionselect'200215128','高斯','男',20,'MA'insertintoStudentvalues('200215129','张三','男',20,'MA')insertintoCourseselect'1','数据库','5',44unionselect'2','数学',null,2unionselect'3','信息系统','1',4unionselect'4','操作系统','6',3unionselect'5','数据结构','7',4unionselect'6','数据处理',null,2unionselect'7','JAVA语言','6',4insertintoSCselect'200215121','1',92unionselect'200215121','2',85unionselect'200215121','3',88unionselect'200215122','2',90unionselect'200215122','3',80unionselect'200215123','1',60unionselect'200215123','2',88unionselect'200215124','2',70insertintoSCvalues('200215129','2',68)insertintoSCselect'200215121','4',88unionselect'200215121','5',90unionselect'200215121','6',91unionselect'200215121','7',75--(1)求选修了数学的学生学号和姓名。selectSno,SnamefromStudent5whereSnoin(selectSnofromSCwhereCnoin(selectCnofromCoursewhereCname='数学'))--(2)求数学课程的成绩高于张三的学生学号和成绩。selectStudent.Sno,Student.Sname,SC.GradefromStudent,SCwhere(Student.Sno=SC.SnoandGrade(selectGradefromSCwhereSno=(selectSnofromStudentwhereSname='张三')))--(3)求其它系中年龄小于计算机系年龄最大者的学生。select*fromStudentwhereSdept!='CS'andSage(selectMAX(Sage)fromStudentwhereSdept='CS')--(4)求其它系中比计算机系学生年龄都小的学生。select*fromStudentwhereSdept!='CS'andSageALL(selectMIN(Sage)fromStudentwhereSdept='CS')--(5)求选修了数学课程的学生姓名。selectStudent.SnamefromStudentwhereSnoin(selectSnofromSCwhereCno=(selectCnofromCoursewhereCname='数学'))--(6)求没有选修数学课程的学生姓名。selectStudent.SnamefromStudentwhereSnoin(selectSnofromSCwhereCno!=(selectCnofromCoursewhereCname='数学'))--(7)查询选修了全部课程的学生姓名。selectSnamefromStudentasSwherenotEXISTS(select*fromCourseasCwherenotEXISTS(select*fromSCwhere6S.Sno=SC.snoandSC.Cno=C.Cno))--(8)求至少选修了学号为“200215124“的学生所选修的全部课程的学生学号和姓名。selectSno,SnamefromStudentasSwherenotEXISTS(select*fromSCasSC1whereSC1.Sno='200215124'andnotEXISTS(select*fromSCasSC2whereSC2.Sno=S.snoandSC1.Cno=SC2.Cno))实验数据建立表:7查询一:查询二:查询三:查询四:8查询五:查询六:查询七:查询八:实验总结1.嵌套查询:一个select-from-where语句称为一个查询块。将一个查询块嵌套在另一个查询块的where字句或having短语的条件中的查询。2.嵌套查询可以在数据库中,建立图标后可以依据查询的条件很快的定位到自己所需的数据,在很短的时间内把其查找出来。9指导教师意见签名:年月日注:各学院可根据教学需要对以上栏木进行增减。表格内容可根据内容扩充。