数据库实验(四)视图

数据库实验(四)视图

一、 实验目的
熟悉SQL语言有关视图的操作,能够熟练使用SQL语句来创建需要的视图,定义数据库外模式,并能使用所创建的视图实现数据管理。

二、 实验内容和要求
在实验一所创建的学生数据库中,
1 写出创建满足下述要求的视图的SQL语句,并执行所写代码。
(1)包含学生的学号、姓名、所在系、年龄,课程号、课程名、课程学分的视图。

create VIEW Student1(学号,姓名,所在系,年龄,课程号,课程名,课程学分)
AS
select Student.Sno, Sname,Sdept, Sage,SC.Cno, Cname, Credit
from Student, Course,SC
where Student.Sno = SC.Sno AND SC.Cno = Course.Cno 
with check option ;

(2)包含学生的学号、姓名、选修的课程名和考试成绩的视图。

create VIEW Student2(学号,姓名,选修课程名,考试成绩)
AS
select Student.Sno, Sname,Cname, Grade
from Student, Course,SC
where Student.Sno = SC.Sno AND SC.Cno = Course.Cno 
with check option ;

(3)统计每个学生的选课门数,要求列出学生学号和选课门数的视图。

create VIEW Student3 (学号,选课门数)
AS
select Sno, COUNT(Cno)
from SC
group by Sno
with check option ;

(4)统计每个学生的修课总学分,要求列出学生学号和总学分的视图(说明:考试成绩大于等于60才可获得此门课程的学分)。

create VIEW Student4(学号,总学分)
AS
select Sno, SUM(Credit)
from SC, Course
where SC.Cno = Course.Cno AND Grade >= 60
group by Sno 
with check option ;

2 利用第1题建立的视图,完成如下查询。
(1)查询考试成绩大于等于90分的学生的姓名、课程名和成绩。

select 姓名, 选修课程名,考试成绩
from Student2
where 考试成绩 >= 90 ;

(2)查询选课门数超过3门的学生的学号和选课门数。

select 学号, 选课门数
from Student3
where 选课门数 > 3 ;

(3)查询计算机系选课门数超过3门的学生的姓名和选课门数。

select Student3.学号, 选课门数
from Student3, Student1
where Student3.学号 = Student1.学号 AND 选课门数 > 3 AND 所在系 = '计算机系' ;

(4)查询修课总学分超过10分的学生的学号、姓名、所在系和修课总学分。

select Student4.学号,姓名,所在系,总学分
from Student1 , Student4
where Student1.学号 = Student4.学号 AND 总学分 > 10 ;

(5)查询年龄大于等于20岁的学生中,修课总学分超过10分的学生的姓名、年龄、所在系和修课总学分。

select 姓名,年龄,所在系,总学分
from Student1 , Student4
where Student1.学号 = Student4.学号 AND 总学分 > 10 AND 年龄 >= 20 ;

3.使用WITH CHECK OPTION,在第1题建立的视图(1)的基础上,再创建一个“计算机系”同学的学号、姓名、所在系、年龄,课程号、课程名、课程学分的视图。
(1)增加一条记录,
0841101 张新 计算机系 20 C001 高等数学 4
(2)修改这条记录为
0841101 张新 物理系 20 C001 高等数学 4
以上两个操作是否能够实现?为什么?可以实现的,写出SQL语句。

扫描二维码关注公众号,回复: 11240174 查看本文章
create VIEW computer(学号,姓名,所在系,年龄,课程号,课程名,课程学分)
AS
select  学号,姓名,所在系,年龄,课程号,课程名,课程学分
from Student1
where 所在系 = '计算机系'
with check option ;

不能实现,视图或函数’computer’ 不可更新,因为修改会影响多个基表。如果computer视图是独立的,使用with check option则第一条语句可以正常插入,第二条语句不可以,因为不是计算机系,不允许插入。

insert 
into computer
values('0841101','张新','计算机系',20, 'C001', '高等数学', 4) ;

insert 
into computer
values('0841101','张新','物理系',20, 'C001', '高等数学', 4) ;

4.以下操作能否实现,如果能实现,给出相应的SQL语句,否则,解释不能实现的原因。
(1)对Student表,创建一个只包含男生信息的视图。对此视图执行将“李勇”的年龄更新为22岁。

create VIEW BoyInformation(学号,姓名,年龄,所在系)
AS
select Sno, Sname, Sage, Sdept
from Student
where Ssex = '男' ;

update BoyInformation
set 年龄 = 22
where 姓名 = '李勇' ;

(2)在上题创建的视图中。删除“刘晨”同学的记录。

delete 
from BoyInformation
where 姓名  = '刘晨' ;

(3)第3题建立的“计算机系”同学的视图,对此视图执行将“李勇”的年龄更新为22岁。

update computer
set 年龄 = 22
where 姓名 = '李勇' ;

(4)第3题建立的“计算机系”同学的视图,对此视图执行删除“刘晨”同学的记录。

delete
from computer
where 姓名 = '刘晨' ;

视图或函数’computer’ 不可更新,因为修改会影响多个基表。

上述诸题,如果能够实现,请给出SQL语句,并对结果截图,如果不能实现,说明原因。
视图设计器的使用:

  1. 打开 SSMS,为数据库“新建视图”,将启用视图设计器。
  2. 在起始界面,将出现“添加表”的窗口。可以在此窗口添加所需要的表、视图、函数和同义词等。
  3. SSMS 会自动添加并显示视图设计器的工具栏。视图设计器从上往下被划分为4个窗格:关系图窗格、条件窗格、SQL 窗格和结果窗格。可以通过工具栏或者右键菜单显示或关闭某些窗格。
  4. 根据新建视图的需要,从表中选择视图引用的列。将列加入视图有3中方式:可以再关系图中选中相应表的相应列左边的复选框来完成;也可以通过选择条件窗格中的【列】栏上的列名来完成;还可以再SQL窗格中输入SELECT语句来选择视图需要的列。
  5. 通过工具栏或者右键菜单可以随时添加表或派生表。如果某些表已经创建了主键,则视图设计器会自动识别主键并为这些表创建 INNER JOIN。也可以手动将其中一个表的某个列拖曳到另一个表的某个列,从而为这两个表建立连接。
  6. 默认的连接是内连接(INNER JOIN),如果需要修改为其它连接关系(LEFT OUTER JOIN、RIGHT OUTER JOIN、FULL OUTER JOIN 等),可以直接右键单击连接,然后选择从某张表中“选择所有行”。
  7. 在“条件窗格”中,可以创建别名,添加筛选、分组条件,或者在 “SQL 窗格”中编辑 T-SQL 代码,创建别名,添加筛选、分组条件。从工具栏或右菜单选择“执行 SQL”可以查看输出结果。
    三、 实验小结

无论你遇到什么挫折,以追求自我的心态去理解世界的规律,并因此明白,所有努力将都有意义,享受努力带给自己的改变!

猜你喜欢

转载自blog.csdn.net/nuist_NJUPT/article/details/106025730
今日推荐