实验2实验报告.doc

上传人:文库蛋蛋多 文档编号:2888247 上传时间:2023-03-01 格式:DOC 页数:32 大小:3.79MB
返回 下载 相关 举报
实验2实验报告.doc_第1页
第1页 / 共32页
实验2实验报告.doc_第2页
第2页 / 共32页
实验2实验报告.doc_第3页
第3页 / 共32页
实验2实验报告.doc_第4页
第4页 / 共32页
实验2实验报告.doc_第5页
第5页 / 共32页
点击查看更多>>
资源描述

《实验2实验报告.doc》由会员分享,可在线阅读,更多相关《实验2实验报告.doc(32页珍藏版)》请在三一办公上搜索。

1、实验二 SQL Server2008数据查询【实验目的】掌握SQL Server2008数据查询语言的使用,能独立按要求对数据库进行指定的查询操作。【实验要求】1、每完成一个任务,截取全屏幕快照13张作为中间步骤和结果的贴图,粘贴在最后的实验报告中。2、自己编一些新的数据插入到数据表中,丰富每个人的数据的同时还要保证每个查询的结果集不为空,或结果不为0。【实验任务及实验过程】(内附,每题代码)1、 将自己的信息插入到 stud_info 学生信息表中。学号姓名出生性别地址电话邮编成绩2011211012孙嘉璐1993女天津市河西区022-88296868123456624代码:/*4、查询“计

2、算机工程系”、“计算机网络技术专业”、班全体学生的基本信息程序*/use sunjialu3_dataGOINSERT INTO stud_info VALUES (2011211012,孙嘉璐,1993-01-12 00:00:00.000,女,天津市河西区,022-88296868,100876,624)2、 显示 stud_grade 学生成绩表中成绩为 85,86 或 88 的记录。程序:use sunjialu3_dataGOSELECT * FROM stud_grade WHERE grade=85 OR grade=86 OR grade=883、 显示 stud_grade

3、学生成绩表中的最高分的学生学号和课程号。方法:使用子查询功能,和计算函数MAX程序: use sunjialu3_dataGOSELECT stud_id course_id FROM stud_gradeWHERE grade in(select MAX(grade)from stud_grade )4、 查询“计算机工程系”、“计算机网络技术专业”、02 班全体学生的基本信息方法:先查找出“计算机网络技术专业”所对应的的编号。在查找与此编号比配的学号,使用了模糊匹配 LIKE。代码:/*4、查询“计算机工程系”、“计算机网络技术专业”、班全体学生的基本信息程序*/use sunjialu3

4、_dataGOSELECT speccode FROM specialty_codeWHERE specname=计算机网络技术use sunjialu3_dataGOSELECT * FROM stud_infowhere stud_id like 04010202_5、 查询“计算机工程系”、“计算机网络技术专业”、02 班的学生人数。方法:使用了计算函数count(*)计算元组数量和模糊匹配LIKE 。程序:use sunjialu3_dataGOSELECT COUNT(*) FROM stud_infowhere stud_id like 04010202_6、 显示出与学号为“04

5、01040112”的学生同年出生的所有学生的学号、姓名和出生日期。 提示:可以使用函数year()。方法:使用了year函数,同时使用子查询的方法得到与学号0401040112的出生年份,进行比较,得到出生年份相等的同学。代码:/*显示出与学号为“0401040112”的学生同年出生的所有学生的学号、姓名和出生日期*/use sunjialu3_dataGOSELECT stud_id as 学号, name as 姓名 ,birthday as 出生日期 FROM stud_infoWHERE YEAR (birthday)=(SELECT YEAR(birthday) FROM stud_

6、infoWHERE stud_id=0401040112)7、 生成绩表中,显示存在有 85 分以上成绩的课程号。方法:使用了WHERE的比较运算符。代码:use sunjialu3_dataGOSELECT course_id FROM stud_gradewhere grade858、 在学生成绩表中,显示所有成绩为空的记录信息。方法:所有成绩为空的表示法是,IS NULL代码:/*在学生成绩表中,显示所有成绩为空的记录信息。*/use sunjialu3_dataGOSELECT * FROM stud_gradeWHERE grade is NULL9、 查询所有电话号码的开头为010

7、的同学的姓名、电话、地址和邮政编码。方法:在stud_info中采用模糊匹配。代码:use sunjialu3_dataGOSELECT name ,telcode, address,zipcode FROM stud_infowhere telcode LIKE 010%10、 查询所有女教师的平均工资。方法:采用计算函数AVG,在teacher_info表中查询,条件是性别为“女“。代码:use sunjialu3_dataGOSELECT AVG(salary) FROM teacher_infowhere gender=女11、 查询课程号为0401010103的课程的最高分、最低分和

8、平均分。方法:采用计算函数AVG,MAX,MIN,条件是课程号为0401010103。代码:use sunjialu3_dataGOSELECT AVG( grade)as 平均成绩 , MAX(grade) as 最高成绩,MIN(grade) as 最低成绩 FROM stud_gradeWHERE course_id=040101010312、 查询选了课且至少有一门课没有成绩的学生人数。方法:代码:/*12、查询选了课且至少有一门课没有成绩的学生人数*/use sunjialu3_dataGOSELECT COUNT ( DISTINCT stud_id) as 学生人数 FROM s

9、tud_gradewhere grade IS NULL AND course_id IS NOT NULL13、 按职称统计各个教研室的教师人数。方法:使用substring函数选出教研室号,根据教研室号和教师职称进行分组。代码:/*按职称统计各个教研室的教师人数*/use sunjialu3_dataGOSELECT substring(teacher_id,3,2) as 教研室, tech_title as 职称 ,COUNT (*) as 教研人数 FROM teacher_infoGROUP BY substring(teacher_id,3,2),tech_title 14、 将

10、计算机工程系职称为讲师的教师按年龄由低到高排列。方法:采用子查询的方法,先选出计算机工程系的系号,在选出对应系号的课程号,从而选出教授计算机工程系的讲师们,在按年龄由低到高排序,使用ORDER BY 的ASC语句。代码:use sunjialu3_dataGOSELECT name as 姓名, age as 年龄 FROM teacher_info WHERE tech_title=讲师 AND course_id IN(SELECT course_id from teach_scheduleWHERE deptcode IN(SELECT deptcode from dept_codeWH

11、ERE deptname=计算机工程系)ORDER BY age ASC15、 将所有选了课的学生的学号按平均成绩由高到低排列。代码:use sunjialu3_dataGOSELECT stud_id as 学号, AVG(grade) as 平均成绩 FROM stud_gradewhere stud_id IN(select stud_id FROM stud_gradeWHERE course_id IN(SELECT course_id FROM stud_gradeWHERE course_id IS NOT NULL ) GROUP BY stud_idORDER BY AVG(

12、grade) DESC17、将 stud_grade 学生成绩表中课程号为“0401010106”的成绩加 5。代码:use sunjialu3_dataGOUPDATE stud_grade SET grade=grade+5where course_id=040101010618、删除 stud_info 学生信息表中姓名为“张源”的学生记录。方法:使用DELETE函数,又条件删除。代码:use sunjialu3_dataGODELETE FROM stud_info where name=张源19、求选修了“数据库原理”的学生的学号及姓名。方法:子查询方法。代码:use sunjial

13、u3_dataGOSELECT stud_id as 学号, name as 姓名 FROM stud_infoWHERE stud_id IN(SELECT stud_id FROM stud_gradeWHERE course_id IN(SELECT course_id FROM teach_schedulewhere room_id IN (select room_id FROM classroom_infowhere room_name=数据库)20、查询所有没选修“0401010103”课程的学生学号及姓名。代码:use sunjialu3_dataGOSELECT stud_id

14、 as 学号, name as 姓名 FROM stud_infoWHERE stud_id IN(SELECT stud_id FROM stud_gradeWHERE course_id !=0401010103)21、查询与王刚在同一个系学习的学生的姓名和所在的系。方法:查找王刚计算机工程系的系号。代码:/*查询与王刚在同一个系学习的学生的姓名和所在的系*/use sunjialu3_dataGOSELECT deptcode as 系号 FROM dept_codeWHERE deptname=计算机工程系 方法:将dept_code, teach_schedule, stud_gra

15、de三个表连接起来,查找,系号为01的学生姓名和所在系。代码:/*查询与王刚在同一个系学习的学生的姓名和所在的系*/use GOSELECT deptname as 所在系, name as 姓名 FROM dept_code JOIN teach_schedule ON teach_schedule.deptcode=dept_code.deptcodeJOIN stud_grade ON stud_grade.course_id=teach_schedule.course_idWHERE dept_code.deptcode=0122、查询成绩为小于60分的学生的学号、姓名。方法:将stu

16、d_info,stud_grade表连接起来,找寻条件为成绩小于60分。代码:/*查询成绩为小于分的学生的学号、姓名*/use sunjialu3_dataGOSELECT stud_info.stud_id as 学号, stud_grade.name as 姓名 FROM stud_grade JOIN stud_info ON stud_grade.stud_id=stud_info.stud_idWHERE stud_grade.grade平均成绩的学号和成绩。代码:/*查询修了“0401010103”课程且成绩高于此课程的平均成绩的学生的学号和成绩*/use sunjialu3_da

17、taGOSELECT stud_id as 学号,name as 姓名 FROM stud_gradeWHERE course_id=0401010103 AND grade (SELECT AVG(grade) FROM stud_gradewhere course_id=0401010103)24、显示选了课程号为“0401010105”的上课教师姓名。方法:将teacher_info,teach_schedule两个表连接起来,选择课程号是0401010105的上课教师姓名即可。代码:/*显示选了课程号为“0401010105”的上课教师姓名*/use sunjialu3_dataGOS

18、ELECT teacher_info.name as 姓名 FROM teach_schedule JOIN teacher_infoON teach_schedule.teacher_id= teacher_info.teacher_idWHERE teach_schedule.course_id=040101010525、统计不及格人数在 3 人以上的课程的数量。方法:子查询方法,选出成绩3的课程号,用计算函数count输出此类课程的数量即可。代码:/*统计不及格人数在3 人以上的课程的数量*/use sunjialu3_dataGOSELECT count(course_id)as 课程

19、数量 FROM lesson_infoWHERE course_id in(SELECT course_id FROM stud_gradeWHERE grade3)26、显示“计算机工程系”老师所教课程的成绩表。 方法:将dept_code,teach_schedule,lesson_info,teacher_info四个表连接起来,根据前面做题查找过计算机工程系系号为01,选择出相应课程表。代码:/*显示“计算机工程系”老师所教课程的成绩表*/use sunjialu3_dataGOSELECT deptname as 系 ,name as 老师, course_name as 课程 FR

20、OM dept_codeJOIN teach_schedule ON dept_code.deptcode=teach_schedule.deptcodeJOIN lesson_info ON teach_schedule.course_id=lesson_info.course_idJOIN teacher_info ON lesson_info.course_id=teacher_info.course_idWHERE dept_code.deptcode=01【思考题】1、 显示课程号为“0401010103”课程成绩高于“0401010104”课程的学生(同时选了两门课)的学号、姓名和

21、课程“0401010103”成绩。要求给出两种以上(包括两种)的答案和相应结果。如果要求同时给出两门课的成绩,你有什么好办法吗?方法一:给stud_grade表赋予两个别名one two,对其进行比较,在one表中选出0401010103课程,同时在two中选出0401010104课程,使其对应相等即得到同时选了两个课程的同学,最后使one中的03课程成绩two中04课程的成绩,即可完成比较。代码:/*显示课程号为“”课程成绩高于“”课程的学生(同时选了两门课)的学号、姓名和课程“”成绩*/use sunjialu3_dataGOSELECT DISTINCT one.stud_id as 学

22、号,one.name as 姓名,one.grade as 课程成绩FROM stud_grade one,stud_grade twoWHERE one.course_id=0401010103 AND two.course_id=0401010104AND one.stud_id=two.stud_id AND one.gradetwo.grade方法二:给stud_grade赋予两个别名,将两个别名代表的成绩表通过学号相同连接起来,同时选出03课程和04课程,且使03课程的grade04课程的grade。代码:/*显示课程号为“”课程成绩高于“”课程的学生(同时选了两门课)的学号、姓名和

23、课程“”成绩*/use sunjialu3_dataGOSELECT DISTINCT one.stud_id as 学号,one.name as 姓名,one.grade,two.grade FROM stud_grade one JOIN stud_grade twoON one.stud_id=two.stud_id WHERE one.course_id=0401010103 AND two.course_id=0401010104AND one.gradetwo.grade【实验问题】1、问题:在调试的过程中就出现了,(1行受影响)的语句解决办法:这是因为,上述的代码是我写的一个表中

24、的插入过程,当插入成功时,就会出现这种提示。如果你多插入几行的话,那么就会在调试后,出现多个(1行受影响)。这属于正常现象。2、问题:执行时显示#对象无效。解决办法:有这个错误是因为我这个表是刚刚创建的,系统还没有录进去,系统内存里的表还没有新创建的表。在SQL中点击编辑-IntelliSense-刷新本地缓存,就会发现红色波浪线没有了。【实验心得】通过本次实验训练了我数据库各种查询语句的使用,并且能够熟练使用它们。通过这次实验我学到了year()函数的使用。实验过程中遇到了各式各样的问题,很多我都通过上网查资料,与同学交流将问题解决。感觉数据库的编写需要很强的逻辑抽象思维,才能够把所要查询的东西化为逻辑语言去查询它。我觉得数据库语言的编写需要很扎实的理论知识与发散性的思维,缜密的逻辑相结合。我觉得我在这方面还有不足,很多题目的思路有限,所以希望在今后的练习中,可以进一步有所收获。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号