数据库数据查询实验报告.docx
《数据库数据查询实验报告.docx》由会员分享,可在线阅读,更多相关《数据库数据查询实验报告.docx(18页珍藏版)》请在冰点文库上搜索。
![数据库数据查询实验报告.docx](https://file1.bingdoc.com/fileroot1/2023-5/17/7d5cfcfb-c61c-48c6-8574-baee514a3c43/7d5cfcfb-c61c-48c6-8574-baee514a3c431.gif)
数据库数据查询实验报告
实验报告
课程名称数据库技术与应用
实验名称数据查询实验
1.实验目的
1)掌握select语句的基本语法;
2)学会使用orderby子句进行排序,使用groupby子句进行分组统计;
3)学会数据汇总、连接查询、嵌套查询的方法。
2.实验准备
1)在服务器上创建用户数据库student
2)在用户数据库student中创建学生基本信息表(stud_info)、学生成绩表(stud_grade)、教师基本信息表(teacher_info)、课程信息表(lesson_info)、课程安排表(teach_schedule)、院系代码表(dept_code)、专业代码表(specialty_code)、教研室信息表(staffroom_info)和教室信息表(classroom_info);
3)通过对象资源管理器或SQL编辑器向各个数据表输入实验数据。
3.实验内容和步骤与实验结果
(1)select语句的基本使用
1)查询学生基本表(stud_info)中的每个学生的所有数据。
select*fromstud_info
独立实践:
用select语句查询学生成绩表(stud_grade)的所有记录。
select*fromstud_grade
教师基本信息表(teacher_info)的所有记录。
select*fromteacher_info
课程信息表(lesson_info)的所有记录。
select*fromlesson_info
课程安排表(teach_schedule)的所有记录。
select*fromteach_schedule
院系代码表(dept_code)的所有记录。
select*fromdept_code
专业代码表(specialty_code)的所有记录。
select*fromspecialty_code
教研室信息表(staffroom_info)的所有记录。
select*fromstaffroom_info
教室信息表(classroom_info)的所有记录。
select*fromclassroom_info
2)在学生基本信息表(stud_info)中查询每个学生的地址和电话。
selectstud_id,name,address,telcodefromstud_info
独立实践:
用select语句查询学生成绩表(stud_grade)的一列或若干列。
selectstud_id,name,gradefromstud_grade
教师基本信息表(teacher_info)的一列或若干列。
selectteacher_id,name,gender,salary,course_id
fromteacher_info
课程信息表(lesson_info)的一列或若干列。
selectcourse_id,course_name,course_typefromlesson_info
课程安排表(teach_schedule)的一列或若干列。
selectcourse_id,course_week,teacher_idfromteach_schedule
院系代码表(dept_code)的一列或若干列。
selectdeptnamefromdept_code
专业代码表(specialty_code)的一列或若干列。
selectspecnamefromspecialty_code
教研室信息表(staffroom_info)的一列或若干列。
selectjysh_id,jysh_name,jysh_leader
fromstaffroom_info
教室信息表(classroom_info)的一列或若干列。
selectroom_id,room_name,room_sizefromclassroom_info
3)查询stud_id为“0401010634”的学生的地址和电话。
selectstud_id,name,address,telcodefromstud_info
wherestud_id='0401010634'
独立实践:
用select语句
查询学生成绩表(stud_grade)满足指定条件的一列或若干列。
selectstud_id,name,gradefromstud_grade
wherestud_id='0401010634'
教师基本信息表(teacher_info)满足指定条件的一列或若干列。
selectteacher_id,name,salaryfromteacher_info
whereteacher_id='010101'
课程信息表(lesson_info)满足指定条件的一列或若干列。
selectcourse_id,course_name,course_timefromlesson_info
wherecourse_time=30
课程安排表(teach_schedule)的一列或若干列。
selectcourse_id,course_week,teacher_idfromteach_schedulewherecourse_week=15
院系代码表(dept_code)满足指定条件的一列或若干列。
selectdeptnamefromdept_code
wheredeptcode='03’
专业代码表(specialty_code)满足指定条件的一列或若干列。
selectspecnamefromspecialty_codewherespeccode='040104'
教研室信息表(staffroom_info)满足指定条件的一列或若干列。
selectjysh_id,jysh_name,jysh_leaderfromstaffroom_info
wherejysh_id='0101'
教室信息表(classroom_info)满足指定条件的一列或若干列。
selectroom_id,room_name,room_sizefromclassroom_info
whereroom_size=60
4)查询stud_info表中性别为“女”的学生的地址和电话。
使用AS子句将结果中指定目标列的名称分别指定为汉字标题。
selectstud_idas学号,nameas姓名,addressas地址,telcodeas电话fromstud_info
wheregender=N'女'
5)查询计算机应用教研室的教师工资情况.
selectteacher_id,name,gender,age,tech_title,salaryfromteacher_info
wheresubstring(course_id,3,4)='0101'
6)找出所有姓“王”的教师所对应的技术职称。
selectteacher_id,name,tech_titlefromteacher_info
wheresubstring(name,1,1)='王'
独立实践:
查询所有电话号码中含有“3460”的教师所担任课程的编码。
selectname,course_id,telephonefromteacher_info
wheretelephonelike'%3460%'
7)学生成绩表中查询成绩在80-89之间的学生的学号,课程号和成绩。
selectstud_id,course_id,gradefromstud_grade
wheregradebetween80and90
独立实践:
在学生基本信息表中查询出生日期从“01-01-1987”到“12-31-1987”的学生的学号,的姓名,家庭住址和邮政编码。
selectstud_id,name,address,zipcodefromstud_info
wherebirthdaybetween'01-01-1987'and'12-31-1987'
(2)子查询的使用
1)查找在计算机工程系(教师编号中第一位,第二位为院系编号)工作的教师名册
select*
fromteacher_info
wheresubstring(teacher_id,3,2)
in(selectsubstring(teacher_id,3,2)fromteacher_info
wheresubstring(teacher_id,1,2)='01')
独立实践:
用子查询的方法查找计算机工程系计算机应用教研室(教师编号中第三位、第四位为教研室编号)的教师名册。
select*fromteacher_info
wheresubstring(teacher_id,3,2)=
(selectright(speccode,2)fromspecialty_codewherespecname='计算机应用技术')
(2)查找计算机工程系中所有担任‘计算机专业英语‘的教师编号和姓名
selectteacher_id,namefromteacher_info
wheresubstring(teacher_id,3,2)
in(selectsubstring(teacher_id,3,2)fromteacher_infowheresubstring(teacher_id,1,2)='01')
andright(course_id,2)=(selectsubstring(course_id,9,2)from
lesson_infowherecourse_name='计算机专业英语')
提示练习:
在学生成绩表中查询计算机工程系,且课程名称为计算机专业英语的学生考试情况。
select*fromstud_gradewheresubstring(stud_id,3,2)=
(selectdeptcodefromdept_codewheredeptname='计算机工程系')andright(course_id,2)=
(selectright(course_id,2)fromlesson_info
wherecourse_name=’计算机专业英语’)
3)查找计算机应用技术专业的学生姓名,学号,年龄,电话号码及家庭住址
selectname,stud_id,birthday,telcode,addressfromstud_info
wheresubstring(stud_id,3,2)=(selectdeptcodefromdept_codewheredeptname='计算机工程系')
andsubstring(stud_id,5,2)=(selectsubstring(speccode,5,2)fromspecialty_codewherespecname='计算机应用技术')
提示练习:
查询计算机工程系计算机应用教研室的教师编号、姓名及其课程编号。
selectteacher_id,name,course_idfromteacher_info
wheresubstring(teacher_id,3,2)=(selectdeptcodefromdept_codewheredeptname='计算机工程系')
andsubstring(teacher_id,3,2)=(selectsubstring(jysh_id,3,2)fromstaffroom_infowherejysh_name='计算机应用')
4)查找计算机工程系担任“多媒体技术”课程教学的教师名称,电话号码,以及课程编码
selectname,telephone,course_idfromteacher_infowhereleft(teacher_id,2)
in(selectdeptcodefromdept_codewheredeptname='计算机工程系')
andright(course_id,2)
in(selectsubstring(course_id,9,2)
fromlesson_infowherecourse_name=’多媒体技术’)
独立实践:
查询计算机工程系参与了‘多媒体技术‘课程考试的学生的学号,姓名和考试成绩
selectstud_id,name,gradefromstud_grade
wheresubstring(stud_id,3,2)
=(selectdeptcodefromdept_codewheredeptname='计算机工程系')
andcourse_id=
(selectcourse_idfromlesson_infowherecourse_name='多媒体技术')
(3)连接查询的使用
1)下列命令实现stud_info与stud_grade等值连接,请完善其命令。
select*fromstud_info
innerjoinstud_grade
onstud_info.stud_id=stud_grade.stud_id
orderbystud_info.stud_id
独立实践:
写出课程安排表(teach_schedule)与课程信息表(lesson_info)的等值连接的sql语句。
select*fromteach_schedule
innerjoinlesson_info
onteach_schedule.course_id=lesson_info.course_id
orderbyteach_schedule.course_id
2)下列命令实现teacher_info与lesson_info左外连接,请完善其命令。
selectlesson_info.course_name,teacher_info.name,
teacher_info.teacher_idfromteacher_info
leftouterjoinlesson_info
onlesson_info.course_id=teacher_info.course_id
独立实践:
写出教师信息表(teacher_info)与课程安排表(teach_schedule)的右外连接的sql语句。
selectteacher_info.*,teach_schedule.*fromteacher_info
rightouterjointeach_schedule
onteach_schedule.course_id=teacher_info.course_id
(4)数据汇总
1)查询计算机工程系全体教师的工资情况
selectavg(salary)as计算机工程系教师平均工资
fromteacher_info
Whereleft(teacher_id,2)=(selectdeptcodefromdept_codewheredeptname='计算机工程系')
独立实践:
查询计算机工程系教师的最大年龄和最小年龄
selectmax(age)as最大年龄,min(age)as最小年龄
fromteacher_info
whereleft(teacher_id,2)=(selectdeptcodefromdept_codewheredeptname='计算机工程系')
2)求计算机工程系教师的平均年龄
selectavg(age)as计算机工程系教师平均年龄
fromteacher_info
whereleft(teacher_id,2)=(selectdeptcodefromdept_codewheredeptname='计算机工程系')
独立实践:
查询计算机工程系学生的最大分数和最低分数
selectmax(mark)as最大分数,min(mark)最低分数
fromstud_info
wheresubstring(stud_id,3,2)=(selectdeptcodefromdept_code
wheredeptname='计算机工程系')
3)求计算机工程系教师的总人数
selectcount(teacher_id)as计算机工程系教师总人数
fromteacher_info
whereleft(teacher_id,2)=(selectdeptcodefromdept_code
wheredeptname='计算机工程系')
独立实践:
统计计算机工程系担任多媒体技术课程教学的教师的工资总和
selectsum(salary)as总工资
fromteacher_info
whereleft(teacher_id,2)=(selectdeptcodefromdept_code
wheredeptname='计算机工程系')andcourse_id='0401010106'
(5)groupby.orderby子句的使用
1)按照职称统计各各教研室的教师人数
selecttech_title职称,count(tech_title)人数
fromteacher_info
groupbytech_title
独立实践:
按性别统计计算机工程系的学生人数
selectgender,count(gender)
fromstud_info
wheresubstring(stud_id,3,2)=(selectdeptcodefromdept_code
wheredeptname='计算机工程系')
groupbygender
2)将计算机工程系支撑位“讲师”的教师,按年龄由低到高排序
selectteacher_id,name,tech_title,age
fromteacher_info
wheretech_title='讲师'
orderbyage
独立实践:
将计算机工程系的学生情况按出生日期的先后序列
Selectname,year(getdate())-year(birthday)agefromstud_info
orderbybirthday
实验总结:
总的来说,这次实验做得并不顺利,最主要的原因就是对SELECT语句的基本语法不熟练,写查询语句时还要一边看书一边写,花了不少时间,但却收获很多。
通过实验进一步熟悉了SQLServer2005的一些基本操作,熟悉并掌握了SELECT语句的基本语法,会使用简单的连接查询、嵌套查询、数据汇总等基本语句和方法,并学会了使用orderby子句进行排序,使用groupby子句进行分组统计。
当然在实验过程中遇到不少问题,例如,当子查询返回的值不止一个时,或子查询用作表达式时,子查询语句不能跟随在=、!
=、<、<=、>、>=之后,此时应改为in。
总之,实验上机操作能帮助我们发现并纠正很多问题。