当前位置:文档之家› 数据库上机实验

数据库上机实验

学号 12051134 姓名张宏源班级物联网1班上机实验四——SELECT语句基本格式的使用一、实习目的:掌握SELECT的基本使用格式,能使用SQL Server对表作简单查询。

二、实习准备:1.复习第三章3.4节中SELECT语句的基本使用格式。

2.复习SQL中五种库函数:AVG、SUM、MAX、MIN、COUNT;3.完成习题三第12题中的各项操作的SQL语句。

三、实习内容:1.验证习题三第12题中的各项操作的SQL语句。

① 找出所有被学生选修了的课程号;Select Distinct CnoFrom GradeOrder by Cno②找出01311班女学生的个人信息;Select*From Studentwhere Ssex='女'and Clno=01311③找出01311班、01312班的学生姓名、性别、出生年份;Select Sname,Ssex,2014-Sage as birthyearFrom Studentwhere Clno='01311'or Clno='01312'④找出所有姓李的学生的个人信息;Select*From Studentwhere Sname like'李%'⑤找出学生李勇所在班级的学生人数;Select numberFROM Classwhere clno=(select Clnofrom Studentwhere Sname='李勇')⑥找出课程名为操作系统的平均成绩、最高分、最低分;Select AVG(Gmark),MAX(Gmark),MIN(Gmark)FROM Gradewhere Cno=(Select Cnofrom Coursewhere Cname='操作系统')⑦找出选修了课程的学生人数;Select COUNT(Sno)as renshuFROM Grade⑧找出选修了课程操作系统的学生人数。

Select COUNT(Sno)as renshuFROM Gradewhere Cno=(Select Cnofrom Coursewhere Cname='操作系统')2.试一下以下语句是否正确:SELECT eno,basepay,serviceFROM salaryWHERE basepay<AVG(basepay)答:不对,聚合函数不应该出现在where语句中,除非该聚合位于HAVING 子句或选择列表所包含的子查询中,并且要对其进行聚合的列是外部引用四、上机实验收获(感想):更加熟悉了SQL基础语言的运用,实际操作后弥补了理论想象的不足五、思考题:什么情况下需要使用关系的别名?别名的作用范围是什么?1.简化书写2.子查询3.为了把先后查询的同一关系区分开来学号姓名班级上机时间上机实验五——SELECT语句高级格式和完整格式的使用一、实习目的:掌握SELECT语句的嵌套使用方法,能使用SQL Server2000对表作复杂查询。

二、实习准备:1.复习第三章3.4节中SELECT语句的高级格式和完整格式的使用。

2.了解库函数在分组查询中的使用规则;3.完成习题三第13、14题中的各项操作的SQL语句。

三、实习内容:完成以下各项操作的SQL语句:①找出与李勇在同一个班级的学生信息;Select*FROM Studentwhere Clno=(Select Clnofrom studentwhere Sname='李勇')②找出选修了课程操作系统的学生学号和姓名;Select Sno,Snamefrom studentwhere sno in(Select distinct Snofrom Gradewhere Cno=(Select Cnofrom Coursewhere Cname='操作系统'))③找出年龄介于学生李勇和25岁之间的学生信息;(已知李勇年龄小于25岁)Select*from studentwhere Sage in(Select Sagefrom Student)and Sage<25④找出所有没有选修1号课程的学生姓名Select distinct s.snamefrom Student s LEFT JOIN Grade gon s.sno=g.snowhere CNO!= 1⑤查询选修了3号课程的学生学号及其成绩,并按成绩的降序排列;Select Sno,Gmarkfrom gradewhere Cno=3Order by Gmark DESC⑥求每个课程号及相应的选课人数;Select Cno,count(cno)as人数from gradegroup by cnoorder by cno⑦查询选修了3门以上课程的学生学号。

Select snofrom Gradegroup by snohaving COUNT(sno)>3四、上机实验收获(感想):五、思考题:1.用UNION或UNION ALL将两个SELECT命令结合为一个时,结果有何不同?。

UNION 命令只会选取不同的值,UNION ALL 命令和UNION 命令几乎是等效的,不过UNION ALL 命令会列出所有的值2.当既能用连接词查询又能用嵌套查询时,应该选择哪种查询较好?为什么?选用连接词查询。

因为连接词查询,效率比嵌套查询高3.库函数能否直接使用在:SELECT选取目标、HAVING子句、WHERE子句、GROUP BY列名中?库函数可以使用在SELECT选取目标、HA VING字句、WHERE子句,不能使用在GROUP BY列名学号姓名班级上机时间上机实验六——SQL的存储操作一、实习目的:掌握用交互式SQL语句对已建基本表进行存储操作:修改、删除、插入,加深对数据的完整性的理解。

二、实习准备:1.复习数据的完整性,在进行数据的修改、删除、插入时,要注意保持数据的一致性。

2.复习第三章3.5节UPDATE、DELETE、INSERT语句与子查询的结合使用;3.完成习题三15题中的各项操作的SQL语句。

三、实习内容:1、完成以下各项操作的SQL语句:①将01311班的全体学生的成绩置零update Grade set Gmark=0where Sno in(select Sno from Studentwhere Clno='01311'))②删除01311班全体学生的选课记录;Delete from Gradewhere sno in(select snofrom Studentwhere clno='01311')③学生李勇已退学,从数据库中删除有关他的记录;delete from Gradewhere Sno in(select Sno from Studentwhere Sname='李勇')update Class set Number=Number-1where Clno in(select Clno from Studentwhere Sname='李勇')update Class set Monitor=casewhere Clno in(select Clno from Studentwhere Sname='李勇')delete from Studentwhere Sname='李勇'④对每个班,求学生的平均年龄,并把结果存入数据库;alter table Class add pingjunnianlin smallint nullupdate Classset pingjunnianlin=(select AVG(Sage)from Student whereClno='00311')where Clno='00311'update Classset pingjunnianlin=(select AVG(Sage)from Student whereClno='00312')where Clno='00312'update Classset pingjunnianlin=(select AVG(Sage)from Student whereClno='01311')where Clno='01311'2、把所有工程师的基本工资(Basepay)增加100,试一试以下的UPDATE语句对不对:UPDATE salarySET basepay=basepay+100WHERE eno in(SELECT enoFROM employeeWHERE title=’工程师’)对的四、上机实验收获(感想):五、思考题:DROP命令和DELETE命令的本质区别是什么?DROP是删除表DELETE是删除表中的记录学号姓名班级上机时间上机实验七——视图的建立及操作一、实习目的:掌握创建、删除和查询视图的方法,验证可更新视图和不可更新视图。

二、实习准备:1.复习第三章3.6节视图;2.完成习题三第16题中的各项操作的SQL语句。

3.了解可更新视图和不可更新视图。

三、实习内容:1.验证习题三第16题中各项操作的SQL语句;①建立01312班选修了1号课程的学生视图Stu_01312_1;create view Stu_01312_1AS select*From student,Gradewhere clno='01312'and sno='1'②建立01312班选修了1号课程并且成绩不及格的学生视图Stu_01312_2;create view Stu_00312_2asselect*from Studentwhere Sno in(select Sno from Grade where o='1'andGrade.Gmark<='60')and Clno='00312'③建立视图Stu_year,由学生学号、姓名、出生年份组成。

create view Stu_yearasselect sno as'学号',sname as'姓名','出生年份'=year(getdate())-sage from Student④查询1990年以后出生的学生姓名Create view v_dayAsselect Snamefrom Studentwhere Sage<=year(getdate())-1990⑤查询01312班选修了1号课程并且成绩不及格的学生的学号、姓名、出生年份。

相关主题