【数据库系统原理】实验四 视图

1、实验目的

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

2、实验内容及要求

针对给定的数据库模式以及相应的应用需求,创建视图和带WITH CHECK OPTION的视图,并验证视图WICH CHECK OPTION选项的有效性。

3、实验步骤

(1)利用课本P45-46 页建立的Student、Course和SC表,写出创建满足下列要求的视图的SQL语句。

①查询学生的学号、姓名、所在系、课程号、课程名、课程学分。

/*创建视图IS_Student_One*/
CREATE VIEW IS_Student_One(学号,姓名,所在系,课程号,课程名,课程学分)
AS
SELECT SC.Sno, Sname, Sdept, SC.Cno, Cname, Ccredit
FROM Student, Course, SC
WHERE Student.Sno = SC.Sno AND SC.Cno = Course.Cno
WITH CHECK OPTION;

/*查询视图IS_Student_One*/
SELECT * FROM IS_Student_One

②查询学生的学号、姓名、选修课程名和考试成绩。

/*创建视图IS_Student_Two*/
CREATE VIEW IS_Student_Two(学号,姓名,选修课程名,考试成绩)
AS
SELECT SC.Sno, Sname, Cname, Grade
FROM Student, Course, SC
WHERE Student.Sno = SC.Sno AND SC.Cno = Course.Cno
WITH CHECK OPTION

/*查询视图IS_Student_Two*/
SELECT * FROM IS_Student_Two

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

​/*创建视图IS_Student_Three*/
CREATE VIEW IS_Student_Three(学号,选课门数)
AS
SELECT Sno, COUNT(Cno)
FROM SC
GROUP BY Sno
WITH CHECK OPTION;

/*查询视图IS_Student_Three*/
SELECT * FROM IS_Student_Three

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

/*创建视图IS_Student_Four*/
CREATE VIEW IS_Student_Four(学号,总学分)
AS
SELECT Sno, SUM(Ccredit)
FROM SC, Course
WHERE SC.Cno = Course.Cno AND Grade >= 60
GROUP BY Sno
WITH CHECK OPTION;

/*查询视图IS_Student_Four*/
SELECT * FROM IS_Student_Four

(2)利用第(1)题建立的视图,完成如下查询:

①查询考试成绩大于等于90分的学生的姓名、课程名和成绩。

/*对IS_Student_Two视图进行查询*/
SELECT 姓名, 选修课程名 AS 课程名, 考试成绩 AS 成绩
FROM IS_Student_Two
WHERE 考试成绩 >= 90

②查询选课门数超过3门的学生的学号和选课门数。

/*对IS_Student_Three视图进行查询*/
SELECT 学号, 选课门数
FROM IS_Student_Three
WHERE 选课门数 > 3

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

/*对IS_Student_One和IS_Student_Three视图进行查询*/
SELECT DISTINCT 姓名, 选课门数
FROM IS_Student_One, IS_Student_Three
WHERE IS_Student_One.学号 = IS_Student_Three.学号 AND 选课门数 > 3 AND 所在系 = '计算机系'

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

/*对IS_Student_One和IS_Student_Four视图进行查询*/
SELECT DISTINCT IS_Student_One.学号, 姓名, 所在系, 总学分 as 修课总学分
FROM IS_Student_One, IS_Student_Four
WHERE IS_Student_One.学号 = IS_Student_Four.学号 AND 总学分 > 10

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

/*查询Student、IS_Student_One和IS_Student_Four*/
SELECT DISTINCT 姓名, Sage, 所在系, 总学分 AS 修课总学分
FROM Student, IS_Student_One, IS_Student_Four
WHERE Student.Sno = IS_Student_One.学号 AND 
	IS_Student_One.学号 = IS_Student_Four.学号 AND
	Sage >= 20 AND 总学分 > 10

(3)修改第(1)题④定义的视图,使其能查询每个学生的学号、总学分以及总的选课门数。

/*学号、总学分以及总的选课门数*/
ALTER VIEW IS_Student_Four(学号, 总学分, 总的选课门数)
AS
SELECT Sno, SUM(Ccredit), COUNT(SC.Cno)
FROM SC, Course
WHERE SC.Cno = Course.Cno
GROUP BY Sno
WITH CHECK OPTION;

/*查询修改后的IS_Student_Four*/
SELECT * FROM IS_Student_Four


o(〃^▽^〃)o小唠叨

今天老师布置啦数据库实验四,有很多实验结果图我就不放上来啦,别问为什么,问就是太多啦懒得一个一个上传啦

噢,对啦,这里还有一个坑没填,就是“并验证视图WICH CHECK OPTION选项的有效性”这个部分木有验证,先标记一下!!!

By 朱帅Esther~~~



2020.5.16上午 填坑WITH CHECK OPTION验证

参考啦大佬的博客https://blog.csdn.net/weixin_43753311/article/details/105923399?utm_source=app

还是老规矩,截图我就不放啦(*≧︶≦))( ̄▽ ̄* )ゞ

1、创建一个新的视图WithCheckOption_Test

/*创建视图视图WithCheckOption_Test*/
CREATE VIEW WithCheckOption_Test(学号,姓名,年龄)
AS
SELECT Sno, Sname, Sage
FROM Student
WHERE Sage <= '19'
WITH CHECK OPTION;

2、查询视图

/*查询视图*/
SELECT * FROM WithCheckOption_Test

3、插入数据

/*插入一个年龄<=19的数据显示成功插入*/
INSERT INTO WithCheckOption_Test VALUES('1512020', 'ZHL', 17)
/*插入一个年龄>19的数据显示插入失败*/
INSERT INTO WithCheckOption_Test VALUES('1512021', '朱帅Esther', 21)

好啦,就这样!溜溜球~~

原创文章 3 获赞 9 访问量 893

猜你喜欢

转载自blog.csdn.net/weixin_43232564/article/details/106153004