您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > 数据结构与算法 > 数据库原理上机作业实验4-5
学号:15905125姓名:吴鑫达班级:计算机一班上机时间:2016/5/13数据库版本:MSSQL2008R2上机实验四——SELECT语句基本格式的使用一、实习目的:掌握SELECT的基本使用格式,能使用SQLServer对表作简单查询。二、实习准备:1.复习第三章3.4节中SELECT语句的基本使用格式。2.复习SQL中五种库函数:AVG、SUM、MAX、MIN、COUNT;3.完成习题三第12题中的各项操作的SQL语句。三、实习内容:1.验证习题三第12题中的各项操作的SQL语句。①找出所有被学生选修了的课程号;语句:selectdistinctCnoFromGrade;截图:②找出01311班女学生的个人信息;语句:select*FromStudentWhereSsex='女'andClno='01311';截图:③找出01311班、01312班的学生姓名、性别、出生年份;语句:(六种)1)SelectSname,Ssex,[出生年份]=(2016-Sage)FromStudentWhereClno='01312'orClno='01311';2)SelectSname,Ssex,[出生年份]=(2016-Sage)FromStudentWhereClnoIN('01311','01312');3)SelectSname,Ssex,’出生年份’=(2016-Sage)FromStudentWhereClno='01312'orClno='01311';4)SelectSname,Ssex,”出生年份”=(2016-Sage)FromStudentWhereClno='01312'orClno='01311';5)SelectSname,Ssex,(2016-Sage)AS'出生年份'FromStudentWhereClno='01312'orClno='01311';6)SelectSname,Ssex,(2016-Sage)AS“出生年份”FromStudentWhereClno='01312'orClno='01311';截图:④找出所有姓李的学生的个人信息;语句:Select*FromStudentWhereSnamelike'李%';截图:⑤找出学生李勇所在班级的学生人数;语句:selectCOUNT(*)as'学生人数'fromStudentwhereClnoin(selectClnofromStudentwhereSname='李勇');截图:⑥找出课程名为操作系统的平均成绩、最高分、最低分;语句:selectAVG(Gmark)as'平均成绩',MAX(Gmark)as'最高分',MIN(Gmark)as'最低分'fromGradewhereCnoin(selectCnofromCoursewhereCname='操作系统');截图:⑦找出选修了课程的学生人数;语句:selectCOUNT(distinctSno)as'选修人数'fromGrade;截图:⑧找出选修了课程操作系统的学生人数;语句:selectCOUNT(distinctSno)as'选修操作系统的人数'fromGradewhereCnoIN(selectCnofromCoursewhereCname='操作系统');截图:⑨找出2000级计算机软件班的成绩为空的学生姓名语句:selectSnamefromStudentwhereSnoIN(selectSnofromGradewhereGmark=null)andClnoin(selectClnofromClasswhereInyear='2000'ANDSpeciality='计算机软件');截图:2.试一下以下语句是否正确:SELECTeno,basepay,serviceFROMsalaryWHEREbasepayAVG(basepay)答:不对,聚合函数(集函数)不应该出现在where语句中。(3.4.2:带条件关系查询)四、上机实验收获(感想):实践是检验真理的唯一标准五、思考题:什么情况下需要使用关系的别名?别名的作用范围是什么?答:在简化书写和子查询的情况下。作用范围:区分先后查询的同一关系区。上机实验五——SELECT语句高级格式和完整格式的使用一、实习目的:掌握SELECT语句的嵌套使用方法,能使用SQLServer2000对表作复杂查询。二、实习准备:1.复习第三章3.4节中SELECT语句的高级格式和完整格式的使用。2.了解库函数在分组查询中的使用规则;3.完成习题三第13、14题中的各项操作的SQL语句。三、实习内容:完成以下各项操作的SQL语句:13.①找出与李勇在同一个班级的学生信息;语句:select*fromStudentwhereClnoin(selectClnofromStudentwhereSname='李勇')andSnameNOTIN('李勇');截图:②找出所有与李勇有相同选修课程的学生信息;;语句:select*fromStudentwhereSnoin(selectSnofromGradewhereCnoin(selectCnofromGradewhereSno=(selectSnofromStudentwhereSname='李勇')))andSnameNOTIN('李勇');截图:③找出年龄介于学生李勇与25岁之间的学生信息(已知李勇的年龄小于25岁);语句:select*fromStudentwhereSage(selectSagefromStudentwhereSname='李勇')andSage25;截图:④找出选修了课程操作系统的学生学号与姓名;语句:selectSno,SnamefromStudentwhereSnoin(selectSnofromGradewhereCnoin(selectCnofromCoursewhereCname='操作系统'));截图:⑤找出没有选修1号课程的所有学生姓名;语句:selectSnamefromStudentwhereSnonotin(selectSnofromGradewhereCno='1');截图:⑥找出选修了全部课程的学生姓名。语句:语句:selectSnamefromStudentwherenotexists(select*fromCoursewherenotexists(select*fromGradewhereSno=Student.SnoandCno=Course.Cno));截图:14.针对习题10的四个表,用SQL语言完成以下各项查询:(1)查询选修了3号课程的学生学号及其成绩,并按成绩的降序排列;语句:selectSno,GmarkfromGradewhereCno='3'orderbyGmarkdesc;截图:(2)查询全体学生信息,要求查询结果按班级号升序排列,同一班级学生按年龄降序排列;语句:select*fromStudentorderbyClno,Sagedesc;截图:(3)求每个课程号及相应的选课人数;语句:selectdistinctCno,count(Cno)AS'选修人数'fromGradeGROUPBYCno;截图:(4)查询选修了3门以上课程的学生学号。语句:selectdistinctSno,COUNT(Cno)fromGradegroupbySnohavingCount(Cno)3;截图:四、上机实验收获(感想):实践是检验真理的唯一标准五、思考题:一:问题:使用存在量词[NOT]EXIST的嵌套查询时,何时外层查询的WHERE条件为真,何时为假?答:取决于子查询的select语句,根据它所要查询的值在内查询中进行检查,返回一个逻辑值。1.用UNION或UNIONALL将两个SELECT命令结合为一个时,结果有何不同?。答:1.UNION命令只会选取不同的值,2.UNIONALL命令和UNION命令几乎是等效的3.UNIONALL命令会列出所有的值2.当既能用连接词查询又能用嵌套查询时,应该选择哪种查询较好?为什么?答:选用连接词查询。效率高。3.库函数能否直接使用在:SELECT选取目标、HAVING子句、WHERE子句、GROUPBY列名中?答:库函数可以使用在SELECT选取目标、HAVING字句、WHERE子句,不能使用在GROUPBY列名
本文标题:数据库原理上机作业实验4-5
链接地址:https://www.777doc.com/doc-5420832 .html