实验5数据库的查询(二)一.实验名称:数据库的查询(二)二.目的和要求:(1)掌握连接查询的表示方法。(2)掌握子查询的表示方法。三.实验准备(1)了解连接查询的表示方法。(2)了解子查询的表示方法。四。实验时间:2011年4月14日五。实验设备和实验环境:(1)PC机。(2)SQLServer2000。六.实验内容:1.连接查询的使用(1)查询选修2号课程且成绩为90分以上的学生学号、姓名、系别及成绩。在查询分析器的编辑窗口输人如下的语句并执行:SELECTStudent.sno,sname,Sdept,gradeFROMStudent,ScWHEREEStudent.sno=Sc.snoAndSc.Cno=’2’andSc.Grade90思考与练习:查询成绩在80~90分之间的学生学号、姓名、课程名及成绩。在查询分析器的编辑窗口输人如下的语句并执行:selectstudent.sno,sname,course.cname,sc.gradefromstudent,sc,coursewherestudent.sno=sc.snoandsc.cno=course.cnoandsc.gradebetween80and90;(2)查找每一门课程的间接先行课程(即先行课的先行课)。在查询分析器的编辑窗口输入如下语句并执行:SELECTFirst.Cno,Second.CpnoFROMCourseFirst,CourseSecond.WHEREEFirst.Cpno=Second.Cno思考与练习:查询没有选修课程及其成绩的学生详情。2.子查询的使用(1)查找学习成绩不及格的学生的情况。在查询分析器的编辑窗口输人如下语句并执行:SELECT*FROMStudentWHERESnoIn(SELECTSnoFROMScWHEREGrade60)思考与练习:用子查询的方法查找所有成绩在90分以上的学生的情况。select*fromstudentwheresnoin(selectsnofromscwheregrade90);(2)查找数学系年龄不低于信息系年龄的学生的姓名。在查询分析器的编辑窗口输入如下语句并执行:SELECTSnameFROMStudentWHERESdept=’MA’ANDSage>=ALL(SELECTSageFROMStudentWHERESdept=’IS’)思考与练习:求数据库课程成绩比任一个信息系学生成绩都高的数学系学生的姓名。(3)查找选修了课程名为“数据库系统”的学生学号和姓名。在查询分析器的编辑窗口输人如下的语句并执行:SELECTSno,SnameFROMStudentWHERESnoIn(SELECTSnoFROMScWHERECno=SelectCnoFromCourseWHERECname=’数据库系统’))思考与练习:用连接查询的方法完成上题。selectstudent.sno,snamefromstudent,sc,coursewherestudent.sno=sc.snoandsc.cno=course.cnoandcname='数据库';(4)查找选修了2号课程的学生清单。在查询分析器的编辑窗口输人如下的语句并执行:SELECT*FROMStudentWHEREExists(SELECT*FROMScWHERESc.Sno=Student.SnoAndSc.Cno=’2’)思考与练习:查找选修了2号课程的学生学号、姓名、课程名及成绩。SELECTstudent.sno,sname,cname,gradeFROMstudent,course,scWHEREstudent.sno=sc.snoandcourse.cno=sc.cnoandExists(SELECT*FROMsc,courseWHEREstudent.sno=sc.snoandcourse.cno=sc.cnoandSc.Cno='2');(5)查找至少选修了95002号学生所选修的全部课程的学生学号。在查询分析器的编辑窗口输人如下的语句并执行:SELECTDistinctSCX.SnoFROMScSCXWHERENOTExists(SELECT*FROMScSCYWHERESCY.Sno=’95002’AndNOTExists(Select*FromScSCZWhereSCZ.Sno=SCX.SnoAndSCZ.Cno=SCY.Cno))思考与练习:用子查询的方法查找选修了全部课程的学生清单。SELECTSnameFROMStudentWHERENOTEXISTS(SELECT*FROMCourseWHERENOTEXISTS(SELECT*FROMSCWHERE(Sno=Student.SnoANDCno=Course.Cno)));七.实验总结:1.连接查询是按照两个表中的相同属性进行等值连接,且目标列中去掉了重复的属性列,但是不保留了所有不重复的属性列,在连接查询的基础上,where子句中使用多个条件的连接,则可得到需要查询的结果。2.通过子查询可以更加方便快捷的对表进行数据的查询与操作,但是要注意的就是,查询的方式是由里向外的,并且在select语句中不能使用orderby子句,orderby子句只能对最终的结果进行排序。