1、数据库实验二报告答案仲恺农业工程学院实验报告纸 计算科学(院、系) 信息与计算科学 专业 班 数据库原理与应用 课学号 姓名 实验日期 2010-4-20 教师评定 实验二实验项目:数据导入以及单表查询、多表查询。实验目的:通过实验,要求学生掌握和使用在SQL Server2005导入数据和简单的单表查询、多表查询。实验要求:成功导入数据以及实现简单的单表查询、多表查询。实验内容: 1. 将数据SM_Data.MDF, SM_Log.MDF, sm_data1.mdf使用附加操作导进数据库中。2. SM中四个表说明:教职工表Teacher(Tno, TName, age, sal, mgr,
2、DNo),TNo为教职工编号,TName为教职工姓名,age年龄,sal为月薪,mgr为教职工的上一级领导的职工号,DNo为部门号;课程表为Course(Cno, CName, CCredits, CTno),Cno为课程编号,CName为课程名字,CCredits为课程学分,类型为NUMERIC(2,0), CTno为该课程上课老师的编号,其中外键CTno来自表Teacher的Tno键;学生表为Student(Sno, CLno, SName, SSex, SBir, Sage, Email),其中Sno为学生学号,CLno为系别编号,SName为学生姓名,SSex为学生性别,SBir为学生
3、出生日期,Sage为学生年龄,Email为学生Email;学生选课表为SC(Sno, Cno, Score),其中Sno为学生学号,Cno为课程号,Score为分数,外键Sno和Cno分别来自表Student的Sno和Coures的Cno。对SM进行如下查询:单表查询:(1)查询所有教职工的情况。SELECT *FROM Teacher(2)查询所有教职工的职工编号、姓名。SELECT Tno,TNameFROM Teacher(3)查询所有教职工的姓名和年薪,并且将输出结果中的列名显示为“教职工号”、“年薪”。SELECT 教职工号=Tno,年薪=sal*12FROM Teacher(4)查
4、询职工编号为0002的教职工情况。SELECT *FROM TeacherWHERE Tno=0002(5)查询教职工中年龄在30-40岁之间的教职工姓名。SELECT TnameFROM TeacherWHERE age=30 and age=2(13)查询选修了三门课程的学生学号。SELECT SnoFROM SCGROUP BY SnoHAVING count(sno)=3多表查询:(1) 查询选修了数据库的学生的学号;select sno from sc,coursewhere o=o and cname=数据库(2) 查询数据库成绩不及格的学生名单(输出学号、姓名、成绩);selec
5、t student.sno,sname,scorefrom student,sc,coursewhere cname=数据库 and score60 and o=o and sc.sno=student.sno(3) 使用内连接查询每个学生及其选修课程情况;select *from student a inner join sc b on a.sno=b.sno(4) 使用左连接查询查询每个学生及其选修课程情况;select * from student a left outer join sc b on a.sno=b.sno(5) 使用右连接查询查询每个学生及其选修课程情况;select
6、* from student a right outer join sc b on a.sno=b.sno(6) 在表Teacher中,查询职工张三的上级领导信息;select t2.tno,t2.tnamefrom teacher t1,teacher t2where t1.tname=张三 and t1.mgr=t2.tno(7) 使用IN查询修读课程名为数据库的所有学生的学号和姓名;select sno,snamefrom studentwhere sno in(select snofrom scwhere cno in(select cnofrom coursewhere cname=
7、数据库)(8) 使用EXISTS查询所有选修了001号课程的学生的姓名;select sname from student where exists(select * from sc where sno=student.sno and cno=001)(9) 使用NOT EXISTS查询未选修了001号课程的学生的姓名;select sname from student where not exists(select * from sc where sno=student.sno and cno=001)(10) 在选修课001中,使用ALL查询比学号00001和学号00004的成绩都低的学生
8、学号;select snofrom scwhere cno=001 and scoreall(select score from sc where (sno=00001 or sno=00004) and cno=001)(11) 在选修课001中,使用ANY查询比学号00001或学号00004的成绩低的学生学号;select snofrom scwhere cno=001 and scoreany(select score from sc where sno=00001 and cno=001 or sno=00004 and cno=001)(12) 在选修课001中,查询比平均成绩低的学
9、生的学号;select snofrom scwhere cno=001 and score(select avg(score) from sc where cno=001)(13) 更新表student中的年龄,年龄为2010减去出生年份。update studentset sage=2010-year(sbir)(14) 按总平均值降序给出所有课程都及格但不包括课程001的所有学生的总平均成绩。SELECT Sno,AVG(Score)FROM SCWHERE Cno001GROUP BY SnoHAVING MIN(Score)=60ORDER BY AVG(Score) DESC;源代码:实验结果:实验体会: