数据库实验—视图
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
湖南科技学院电信学院
实验报告
实验项目视图
课程名称数据库原理
时间16年5月10日第12 周第 1.2节地点E404
姓名陶建敏学号2013080021
07
班级通信1301
一、实验要求
能在SQL Server 2012的环境中熟练的进行表的创建和管理。
二、实验目的
1)掌握在SQL Server Management Studio 中对表进行插入、修改和删除数据的操作。2)掌握使用T-SQL语句对表进行插入、修改和删除数据的操作。
3)重点掌握带查询的更新方法。
三、实验环境
1)硬件设备:PC机一台
2)操作系统:Windows 7
3)应用工具:SQL Server 2012
四、实验内容及程序代码
对于“Student”数据库的三个基本表:
S(Sno,Sname,Sage,Ssex,Sdept),C(Cno,Cname,Credit,Semester),SC(Sno,Cno,Grade) 1、请用SQL语句按要求创建视图:
(1)查询学生的学号、姓名、所在系、课程号、课程名、课程学分。
create view学生视图1(学号,姓名,所在系,课程号,课程名,课程学分)
as
select Student.Sno,Sname,Sdept,o,Cname,Ccredit
from Student join SC on Student.Sno=SC.Sno
join Course on o=o
select*from学生视图1
(2)查询学生的学号、姓名、选修的课程名和选课成绩。
create view学生视图2(学号,姓名,选修的课程名,选课成绩)
as
select Student.Sno,Sname,Cname,Grade
from Student join SC1on Student.Sno=SC.Sno
join Course on o=o
select*from学生视图2
(3)统计每个学生的选课门数,要求列出学生学号和选课门数。create view学生视图3(学生学号,选课门数)
as
select Student.Sno,count(Cno)
from Student join SC on Student.Sno=SC.Sno
group by Student.Sno
select*from学生视图3
(4)统计每个学生的修课总学分,要求列出学生学号和总学分。(注明:成绩大于60分才可获得学分)create view学生视图4(学生学号,总学分)
as
select Student.Sno,sum(Ccredit)
from Student join SC on Student.Sno=SC.Sno
join Course on o=o
where Grade>60
group by Student.Sno
select*from学生视图4
(5)查询计算机系VB考试成绩最高的学生的学号、姓名和VB考试成绩。
create view学生视图5(学生的学号,VB考试成绩,姓名)
as
select Student.Sno,grade,Sname
from student join sc on student.sno=sc.sno
join course on o=o
where Sdept='计算机系'and Cname='VB'and grade=(select max(grade)from student join sc on
student.sno=sc.sno
join course on o=o
where Sdept='计算机系'and Cname='VB')
Group BY Student.Sno,grade,Sname
select*from学生视图5
2、利用上面建立的视图,完成如下查询:
(1)查询考试成绩大于等于90分的学生的姓名、课程名和成绩。
select姓名,选修的课程名,选课成绩
from学生视图2
where选课成绩>=90
(2)查询选课门数超过3门的学生的学号和选课门数。
select学生学号,选课门数
from学生视图3
where选课门数>3
学生视图3
从右图对比可知原始数据库没有超过选修3门课的学生(我的原始数据库有更改可能与其他同学不同)(3)查询计算机系选课门数超过3的学生的姓名和选课门数。
select姓名,选课门数
from学生视图1s1join学生视图3s3on s1.学号=s3.学生学号
where所在系='计算机系'and选课门数>3
对比分析可知满足题目要求的没有
(4)查询修课总学分超过10分的学生的学号、姓名、所在系和修课总学分。
select distinct学号,姓名,所在系,总学分
from学生视图1s1join学生视图4s4on s1.学号=s4.学生学号
where总学分>10
(5)查询年龄大于等于20岁的学生中,修课总分数查过10分的学生的姓名、年龄、所在系和修课总学分。select distinct姓名,Sage,所在系,总学分
from Student s join学生视图1s1on s.Sno=s1.学号
join学生视图4s4on s4.学生学号=s1.学号
where Sage>20 and总学分>10
再去执行以下代码验证
select distinct Sname,Sage
from Student S join SC on S.Sno=SC.Sno
where s.Sno='9531101'or s.sno='9521102'
可以知道而另外一个人年龄不符,所以该结果是正确的