师学院数学与计算机科学学院《数据库》实验报告实验序号:07 实验项目名称:数据查询学号2014210758 姓名邹业安专业、班级14信科实验地点222 指导教师褚万军时间2017.6.07一、实验目的及要求•掌握从简单到复杂的各种数据查询。
包括:单表查询、多表连接查询、嵌套查询、集合查询。
•掌握用条件表达式表示检索条件。
•掌握用聚合函数计算统计检索结果。
二、实验设备(环境)及要求1、环境要求:硬件:PC(PII以上,128M以上存)、因特网接入;软件:在SQL Server 2000中三、实验容与步骤1、一般简单查询(1)不带条件的查询指定字段(考虑去掉和不去掉重复值两种情况)。
select distinct 学号 from 选课select 学号 from 选课(2)查询某个表中的所有记录查询教师表中的所有记录(3)使用单个条件的简单查询查询成绩大于50的学生的学号select 学号 from 选课where 成绩>50(4)使用多个条件(AND关系)的查询select工资from教师where工资>200 and工资<500(5)使用多个条件(OR关系)的查询select工资from教师where工资<200 or工资>500(6)使用多个条件(混合AND和OR关系)的查询select*from学生where (院系='2'and生源='')or(院系='6'and生源='')(7)使用带NOT运算的查询select * from 学生where not (生源='')(8)使用BETWEEN•••AND•••的查询select * from 选课where 成绩 between 86 and 93(9)使用NOT•••BETWEEN•••AND•••的查询select * from 选课where 成绩 not between 76 and 93(10)使用LIKE运算符的字符串匹配查询。
select * from 课程where 课程性质 like '专业__'(11)使用LIKE运算符的模板匹配查询。
select*from院系where办公地点like'4_1'(12)查询空值和非空值的select * from 教师where 工资 is nullselect * from 教师where 工资 is not null(13)结果要求排序的查询select * from 选课 --升序order by 成绩select * from 选课 --降序order by 成绩 desc(14)查询结果按多列排序,并分别要求升序和降序的查询。
select * from 选课order by 学号, 成绩select * from 选课order by 学号, 成绩 desc(15)使用TOP显示前若干记录的查询select top 3 * from 学生(16)使用TOP显示前若干记录的查询,如果有满足条件的并列记录一并显示select top 3 * from 学生where 生源=''(17)两个关系的连接查询。
select * from 学生 cross join 选课(18)带其他查询条件的两个关系的连接查询select 学生.学号,院系,,性别,生源,课程编号,成绩from 学生 join 选课on 选课.学号= 学生.学号(19)多个关系(三个以上)的连接查询select * from 学生,课程,选课where 学生.学号= 选课.学号and 课程.课程编号= 选课.课程编号(20)两个关系的广义笛卡尔积运算结果。
select * from 学生 cross join 选课(21)根据两个关系的广义笛卡尔积运算结果得到两个关系进行自连接的结果select e.学号,院系,,性别,生源,课程编号,成绩from 学生 e join 选课 won e.学号= w.学号(22)查询教师-课程信息,查询结果中包括教师、职称、课程名称和课程性质等个字段select ,职称,课程名称,课程性质from 教师 inner join 课程on 教师.教师编号=课程.责任教师(23)查询教师-课程信息,查询结果中包括教师、职称、课程名称和课程性质等个字段,要求结果中列出所有教师信息(即包括不是任何课程责任教师的教师信息)select ,职称,课程名称,课程性质from 教师 left join 课程on 教师.教师编号=课程.责任教师(24)查询教师-课程信息,查询结果中包括教师、职称、课程名称和课程性质等个字段,要求结果中能够反映目前没有确定责任教师的课程信息。
select ,职称,课程名称,课程性质from 教师 right join 课程on 教师.教师编号=课程.责任教师(25)查询教师-课程信息,查询结果中包括教师、职称、课程名称和课程性质等4个字段,要求结果中既能够反映目前不是责任教师的教师信息,又能反映目前没有确定责任教师的课程信息select,职称,课程名称,课程性质from教师full join课程on课程.责任教师=教师.教师编号(26)使用IN运算的简单嵌套查询。
select 教师.from 教师where 教师.教师编号 in (select 课程.责任教师from 课程where 课程性质='专业基础')(27)使用NOT IN运算的简单嵌套查询select 教师.from 教师where 教师.教师编号 not in ( select 课程.责任教师from 课程where 课程性质='专业基础')(28)使用关系运算(如等于)的简单嵌套查询select 教师.from 教师where 教师.教师编号=(select 课程.责任教师from 课程where 课程编号='02')(29)使用ANY或SOME的简单嵌套查询selectfrom教师where工资>=any(select工资from教师where教师编号=20118)select*from教师(30)使用ALL的简单嵌套查询。
selectfrom 教师where 工资>= all(select 工资from 教师where 教师编号=20115)(31)查询院系名称含“计科系”、职称为教授、所负责教程为专业基础的教师、职称、课程名称和课程学时等信息(分别用嵌套查询和连接查询完成,分析各自的效率)select,课程名称,学时from教师join课程on责任教师=教师编号join院系on院系.编号=教师.院系where名称='计科系'and职称='教授'(32)设计两个外层互相关的嵌套查询。
select * from 教师select 教师编号,,性别,职称,工资from 教师 outwhere 工资=(select max(工资)from 教师 innerawhere out.教师编号= innera.教师编号 )(33)使用EXISTS的嵌套查询。
select *from 教师where exists(select *from 课程where 课程.责任教师=教师.教师编号)(34)使用NOT EXISTS的嵌套查询。
select *from 教师where not exists(select *from 课程where 课程.责任教师=教师.教师编号)(35)使用COUNT统计数目的查询。
select * from 教师select count (工资) from 教师(36)使用SUM计算合计的查询。
select sum (工资) from 教师(37)一次完成求和、计数、计算平均值的查询。
select * from 教师compute sum(工资),avg(工资)(38)查询所有课程的成绩都大于60分的学生的平均分最高的学生信息。
select学号,avg(成绩)平均成绩from选课where成绩>60group by成绩,学号order by成绩desc(39)查询数据库课程的成绩大于70分的、所有课程平均分最高的学生信息。
select top(1)*from学生where学号in(select学号from选课join课程on选课.课程编号=课程.课程编号where成绩>70 and课程名称='数据库')(40)查询每个学生的平均成绩。
select学号,avg(成绩)as平均成绩from选课group by学号(41)查询每个学生的所有成绩的最高成绩、最低成绩、平均成绩和所考课程的门数。
select学号,count(*)'所选课程数',max(成绩)'最高成绩',avg(成绩)'平均成绩',min(成绩)'最低成绩'from选课group by学号(42)查询至少有1门必修课程考试成绩的每个学生的平均成绩。
select avg(成绩)from选课where课程编号in(select课程编号from课程where课程性质like'%基础')group by学号(43)设计1个使用COMPUTE•••BY和COMPUTE的查询。
select*from选课order by学号compute avg(成绩),sum(成绩)by学号(44)设计1个使用COMPUTE的查询。
select * from 教师compute sum(工资)(45)设计个使用group•••BY的查询。
select 教师编号,avg(工资)from 教师group by 教师编号四、分析与讨论。