一、实验目的
1、熟练掌握多表连接查询中内连接的两种语法。
2、理解外连接的含义,熟悉外连接的使用。
3、掌握分组查询和排序等语句。
二、实验内容
根据实验1中创建的学生作业管理数据库以及其中的学生表、课程表和学生作业表,进行以下操作。
1、查询选修三门以上(含三门)课程的学生的学号和作业1平均分、作业2平均分和作业3平均分。
1. select sno as 学号,avg(cj1) as 作业1平均分,avg(cj2) as 作业2平均分,avg(cj3) as 作业3平均分 2. from score 3. group by sno 4. having count(*)>=3
2、查询每门被选课程的课程编号、课程名称、作业1平均分、作业2平均分和作业3平均分。
1. select course.cno as 课程编号,cname as 课程名称 ,avg(cj1) as 作业1平均分,avg(cj2) as 作业2平均分,avg(cj3) as 作业3平均分 2. from course,score 3. where course.cno=score.cno 4. group by course.cno,cname
3、查询每门被选课程的课程编号、作业1的最高分和最低分、作业2的最高分和最低分、作业3的最高分和最低分。
1. select cno as 课程编号,max(cj1) as 作业1最高分,min(cj1) as 作业1最低分,max(cj2) as 作业2最高分,min(cj2) as 作业2最低分,max(cj3) as 作业3最高分,min(cj3) as 作业3最低分 2. from score 3. group by cno
4、查询作业1平均分、作业2平均分和作业3平均分均在75分以上(含75分)的学生学号和作业1平均分、作业2平均分和作业3平均分。
1. select sno as 学号,avg(cj1) as 作业1平均分,avg(cj2) as 作业2平均分,avg(cj3) as 作业3平均分 2. from score 3. group by sno 4. having avg(cj1)>=75 and avg(cj2)>=75 and avg(cj3)>=75
5、查询与“张志国”同一班级的学生信息(使用连接查询)。
1. select a.* from student a, student b 2. where a.major=b.major and b.sname='张志国'
6、查询比“计算机应用基础”学时多的课程信息(使用连接查询)。
1. select a.* from course a,course b 2. where a.stime>b.stime and b.cname='计算机应用基础'
7、查询选修课程号为K002的学生的学号、姓名(使用连接查询)。
1. select student.sno,sname from student,score 2. where student.sno=score.sno and cno='K002'
8、查询于兰兰的选课信息,列出学号、姓名、课程名,并按照课程名进行升序排序(使用两种连接查询的方式)。
1. (1)select student.sno,sname,cname 2. from student,course,score 3. where student.sno=score.sno and course.cno=score.cno and sname='于兰兰' 4. order by cname 5. (2)select student.sno,sname,cname 6. from student 7. inner join score on student.sno=score.sno 8. inner join course on course.cno=score.cno 9. where sname='于兰兰' 10. order by cname
三、实验指导
1、启动SQL Server2012软件。
2、通过分离附加的方法,将实验1所创建的作业管理数据库恢复到该软件中。
3、SQL Server中,程序不区别大小写,特别要注意程序中的标点符号,一定要在英文半角状态下输入,否则会出错。
4、注意统计函数的用法,AVG求平均值,SUM求和,MAX求最大值,MIN求最小值,COUNT按列值统计行数。
5、注意HAVING子句和WHERE子句的区别:HAVING子句是对分组后的数据进行条件的筛选,而WHERE子句是对原始数据时行条件的筛选;HAVING子句中可以有统计函数,WHERE子句中不能有统计函数。
6、多表连接查询中一定要有连接条件,对N个表进行查询要有N-1个连接条件。
7、注意多表连接查询的两种写法。