实验七 使用聚集函数的SELECT语句
一. 实验目的
1. 熟练掌握数据查询中的分组、统计、计算和组合的操作方法。
2. 进一步掌握SQL Server 查询分析器的使用,加深对SQL语言的嵌套查询语句的理解。 二. 实验要求c
1.在实验之前做好准备。
2.完成实验,并验收实验结果提交实验报告。 三. 实验内容
在数据库EDUC中用SQL语句实现如下查询:
1)求学生的总人数。
2)求选修了课程的学生人数。
3)求课程的课程号和选修该课程的人数。 4)求选修课程超过2 门课的学生学号。
四. 实验步骤 1) 求学生的总人数.
select count(*) from student;
2) 求选修了课程的学生人数。
select count(distinct sno) from sc;
3)求课程的课程号和选修该课程的人数。
select cno,count(sno) from sc group by cno;
4)求选修课程超过2 门课的学生学号
select sno from sc group by sno having count(*)>2;
五、实验总结
通过本次实验,我了解了SELECT语句的GROUP BY和ORDER BY子句的作用。掌握了统计函数和
分组统计函数的使用方法。熟悉了查询分析器的运行环境。
实验八 视图的定义与使用
一. 实验目的
1. 熟悉和掌握对数据表中视图的查询操作和SQL命令的使用;
2. 熟悉和掌握对数据表中视图的更新操作和SQL命令的使用,并注意视图更新与基本表更
新的区别与联系;
3. 学习灵活熟练的进行视图的操作,认识视图的作用。 二.实验要求
1. 在实验开始之前做好准备工作。
2. 实验之后提交实验报告,思考视图和基本表的区别 三.实验内容 1.定义视图
在EDUC数据库中,已Student、Course 和SC表为基础完成一下视图定义:
1) 将Student, Course 和SC表中学生的学号,姓名,课程号,课程名,成绩定义为视图
V_SC_G;
2) 定义一个反映学生出生年份的视图V_YEAR;
3) 将各位学生选修课程的门数及平均成绩定义为视图V_AVG_S_G; 4) 将各门课程的选修人数及平均成绩定义为视图V_AVG_C_G; 5) 在原来的V_SC_G中增加一个属性列班级号 2.使用视图
1) 查询以上所建的视图结果。
2) 查询平均成绩为90分及以上的学生学号、姓名和成绩;
3) 查询科目成绩大于平均成绩的学生学号、课程号、成绩和平均成绩; 4) 查询1994年出生的学生学号和姓名。
5) 查询班级号为CS01选修了0001号课程的学生学号,姓名和成绩 四. 实验步骤 1.定义视图
1) 将Student, Course 和SC表中学生的学号,姓名,课程号,课程名,成绩定义为视图
V_SC_G.
create view v_sc_g(sno,sname,cno,cname,grade) as
select sc.sno,sname,sc.cno,cname,grade from student,course,sc
where student.sno = sc.sno and sc.cno = course.cno;
2)定义一个反映学生出生年份的视图V_YEAR.
create view v_year(sname,year)
as
select sname,2013-sage from student;
3)将各位学生选修课程的门数及平均成绩定义为视图V_AVG_S_G. create view v_avg_s_g(sno,cnono,avggrade)
as
select sno,count(cno),avg(grade) from sc group by sno;
4)将各门课程的选修人数及平均成绩定义为视图V_AVG_C_G。
create view v_avg_c_g(cno,cnono,avggrade) as
select sc.cno,count(sc.cno),avg(grade) from sc,course
where course.cno = sc.cno group by sc.cno;
5)在原来的V_SC_G中增加一个属性列班级号
2.使用视图
1)查询以上所建的视图结果。
2)查询平均成绩为90分及以上的学生学号、姓名和成绩;
select v_sc_g.sno,sname,grade from v_sc_g where sno in
(select v_avg_s_g.sno from v_avg_s_g
where v_sc_g.sno = v_avg_s_g.sno and v_avg_s_g.avggrade>90);
3)查询科目成绩大于其科目平均成绩的学生学号、课程号、成绩和平均成绩;
select sc.sno ,sc.cno,sc.grade,savggrade from v_avg_c_g,sc,v_avg_s_g
where sc.cno = v_avg_c_g.cno and sc.grade > v_avg_c_g.avggrade and sc.sno=v_avg_s_g.sno;
4)查询1994年出生的学生学号和姓名。 select sno,student.sname
from student,v_year
where student.sname = v_year.sname and year = '1994';
5)查询班级号为CS01选修了0001号课程的学生学号,姓名和成绩 select student.sno,v_sc_g.sname,v_sc_g.grade
from v_sc_g,student
where student.sno = v_sc_g.sno and v_sc_g.cno = '0001' and student.clsno = 'cs01';
五、实验总结
通过本次实验,我掌握了对数据表中视图的查询操作和SQL命令的使用;熟悉了对数据表中视图的更新操作和SQL命令的使用,体会到了视图的作用。