学号12051134姓名张宏源班级物联网1班上机实验四——SELECT语句基本格式的使用一、实习目的:掌握SELECT的基本使用格式,能使用SQLServer对表作简单查询。二、实习准备:1.复习第三章3.4节中SELECT语句的基本使用格式。2.复习SQL中五种库函数:AVG、SUM、MAX、MIN、COUNT;3.完成习题三第12题中的各项操作的SQL语句。三、实习内容:1.验证习题三第12题中的各项操作的SQL语句。①找出所有被学生选修了的课程号;SelectDistinctCnoFromGradeOrderbyCno②找出01311班女学生的个人信息;Select*FromStudentwhereSsex='女'andClno=01311③找出01311班、01312班的学生姓名、性别、出生年份;SelectSname,Ssex,2014-SageasbirthyearFromStudentwhereClno='01311'orClno='01312'④找出所有姓李的学生的个人信息;Select*FromStudentwhereSnamelike'李%'⑤找出学生李勇所在班级的学生人数;SelectnumberFROMClasswhereclno=(selectClnofromStudentwhereSname='李勇')⑥找出课程名为操作系统的平均成绩、最高分、最低分;SelectAVG(Gmark),MAX(Gmark),MIN(Gmark)FROMGradewhereCno=(SelectCnofromCoursewhereCname='操作系统')⑦找出选修了课程的学生人数;SelectCOUNT(Sno)asrenshuFROMGrade⑧找出选修了课程操作系统的学生人数。SelectCOUNT(Sno)asrenshuFROMGradewhereCno=(SelectCnofromCoursewhereCname='操作系统')2.试一下以下语句是否正确:SELECTeno,basepay,serviceFROMsalaryWHEREbasepayAVG(basepay)答:不对,聚合函数不应该出现在where语句中,除非该聚合位于HAVING子句或选择列表所包含的子查询中,并且要对其进行聚合的列是外部引用四、上机实验收获(感想):更加熟悉了SQL基础语言的运用,实际操作后弥补了理论想象的不足五、思考题:什么情况下需要使用关系的别名?别名的作用范围是什么?1.简化书写2.子查询3.为了把先后查询的同一关系区分开来学号姓名班级上机时间上机实验五——SELECT语句高级格式和完整格式的使用一、实习目的:掌握SELECT语句的嵌套使用方法,能使用SQLServer2000对表作复杂查询。二、实习准备:1.复习第三章3.4节中SELECT语句的高级格式和完整格式的使用。2.了解库函数在分组查询中的使用规则;3.完成习题三第13、14题中的各项操作的SQL语句。三、实习内容:完成以下各项操作的SQL语句:①找出与李勇在同一个班级的学生信息;Select*FROMStudentwhereClno=(SelectClnofromstudentwhereSname='李勇')②找出选修了课程操作系统的学生学号和姓名;SelectSno,Snamefromstudentwheresnoin(SelectdistinctSnofromGradewhereCno=(SelectCnofromCoursewhereCname='操作系统'))③找出年龄介于学生李勇和25岁之间的学生信息;(已知李勇年龄小于25岁)Select*fromstudentwhereSagein(SelectSagefromStudent)andSage25④找出所有没有选修1号课程的学生姓名Selectdistincts.snamefromStudentsLEFTJOINGradegons.sno=g.snowhereCNO!=1⑤查询选修了3号课程的学生学号及其成绩,并按成绩的降序排列;SelectSno,GmarkfromgradewhereCno=3OrderbyGmarkDESC⑥求每个课程号及相应的选课人数;SelectCno,count(cno)as人数fromgradegroupbycnoorderbycno⑦查询选修了3门以上课程的学生学号。SelectsnofromGradegroupbysnohavingCOUNT(sno)3四、上机实验收获(感想):五、思考题:1.用UNION或UNIONALL将两个SELECT命令结合为一个时,结果有何不同?。UNION命令只会选取不同的值,UNIONALL命令和UNION命令几乎是等效的,不过UNIONALL命令会列出所有的值2.当既能用连接词查询又能用嵌套查询时,应该选择哪种查询较好?为什么?选用连接词查询。因为连接词查询,效率比嵌套查询高3.库函数能否直接使用在:SELECT选取目标、HAVING子句、WHERE子句、GROUPBY列名中?库函数可以使用在SELECT选取目标、HAVING字句、WHERE子句,不能使用在GROUPBY列名学号姓名班级上机时间上机实验六——SQL的存储操作一、实习目的:掌握用交互式SQL语句对已建基本表进行存储操作:修改、删除、插入,加深对数据的完整性的理解。二、实习准备:1.复习数据的完整性,在进行数据的修改、删除、插入时,要注意保持数据的一致性。2.复习第三章3.5节UPDATE、DELETE、INSERT语句与子查询的结合使用;3.完成习题三15题中的各项操作的SQL语句。三、实习内容:1、完成以下各项操作的SQL语句:①将01311班的全体学生的成绩置零updateGradesetGmark=0whereSnoin(selectSnofromStudentwhereClno='01311'))②删除01311班全体学生的选课记录;DeletefromGradewheresnoin(selectsnofromStudentwhereclno='01311')③学生李勇已退学,从数据库中删除有关他的记录;deletefromGradewhereSnoin(selectSnofromStudentwhereSname='李勇')updateClasssetNumber=Number-1whereClnoin(selectClnofromStudentwhereSname='李勇')updateClasssetMonitor=casewhereClnoin(selectClnofromStudentwhereSname='李勇')deletefromStudentwhereSname='李勇'④对每个班,求学生的平均年龄,并把结果存入数据库;altertableClassaddpingjunnianlinsmallintnullupdateClasssetpingjunnianlin=(selectAVG(Sage)fromStudentwhereClno='00311')whereClno='00311'updateClasssetpingjunnianlin=(selectAVG(Sage)fromStudentwhereClno='00312')whereClno='00312'updateClasssetpingjunnianlin=(selectAVG(Sage)fromStudentwhereClno='01311')whereClno='01311'2、把所有工程师的基本工资(Basepay)增加100,试一试以下的UPDATE语句对不对:UPDATEsalarySETbasepay=basepay+100WHEREenoin(SELECTenoFROMemployeeWHEREtitle=’工程师’)对的四、上机实验收获(感想):五、思考题:DROP命令和DELETE命令的本质区别是什么?DROP是删除表DELETE是删除表中的记录学号姓名班级上机时间上机实验七——视图的建立及操作一、实习目的:掌握创建、删除和查询视图的方法,验证可更新视图和不可更新视图。二、实习准备:1.复习第三章3.6节视图;2.完成习题三第16题中的各项操作的SQL语句。3.了解可更新视图和不可更新视图。三、实习内容:1.验证习题三第16题中各项操作的SQL语句;①建立01312班选修了1号课程的学生视图Stu_01312_1;createviewStu_01312_1ASselect*Fromstudent,Gradewhereclno='01312'andsno='1'②建立01312班选修了1号课程并且成绩不及格的学生视图Stu_01312_2;createviewStu_00312_2asselect*fromStudentwhereSnoin(selectSnofromGradewhereGrade.Cno='1'andGrade.Gmark='60')andClno='00312'③建立视图Stu_year,由学生学号、姓名、出生年份组成。createviewStu_yearasselectsnoas'学号',snameas'姓名','出生年份'=year(getdate())-sagefromStudent④查询1990年以后出生的学生姓名Createviewv_dayAsselectSnamefromStudentwhereSage=year(getdate())-1990⑤查询01312班选修了1号课程并且成绩不及格的学生的学号、姓名、出生年份。Createviewv_avgAsselectStudent.Sno,Sname,year(getdate())-sageas'出生年份'fromStudentinnerjoinGradeonstudent.sno=grade.snowhereGrade.Cno='1'andStudent.Clno='00312'andgmark602.建立一视图Class_grade,用来反映每个班的所有选修课的平均成绩。并对其进行更新操作。createviewClass_gradeasselectStudent.clnoasclno,AVG(Grade.gmark)asGmark_avgfromStudentfulljoinGradeonstudent.sno=grade.snoGroupbyStudent.clno四、上机实验收获(感想):学号姓名班级上机时间上机实验八*——完整性约束的实现一、实习目的:掌握SQL中实现数据完整性的方法,加深理解关系数据模型的三类完整性约束。二、实习准备:1.复习第4章“完整性约束SQL定义”;2.完成习题四第10题中四个表结构的SQL定义。3.了解SQLServer中实体完整性、参照完整性和用户自定义完整性的实现手段。三、实习内容:验证习题四第10题四个表结构的SQL定义。createtablecourse(cnochar(1)primarykey,cnamevarchar(20)notnull,creditsmallintcheck(credit=1andcredit=6))clnochar(5)primarykey,specialityvarchar(20)notnull,inyearchar(4)notnull,numberintegercheck(number1andnumber100),monitorchar(7))createtablestudent3(snochar(7)primarykey,snamevarchar(20)notnull,ssexchar(2)notnulldefault('男'),sagesmallintcheck(sage14andsage65),clnochar(5)notnullreferencescla