当前位置: 首页 > article >正文

河南大学数据库实验6

1.根据EDUC数据库,按如下要求设计视图:

1)基于单个表按投影操作定义视图。

举例:定义一个视图用以查看所有学生的学号、姓名和年龄。

2)基于单个表按选择操作定义视图。

举例:定义一个满足性别=‘男’的学生的所有信息的视图。

3)基于多个表根据连接操作定义视图。

举例:定义一个视图用以查看所有学生的学号、姓名、课名、成绩。

4)基于多个表根据嵌套查询定义视图。

举例1:定义一个比所有‘CS’系的学生年龄都小的学生的信息的视图

举例2:定义一个视图用以查看年龄大于该系平均年龄的学生的学号、姓名。

5)定义含有虚字段(即基本表中原本不存在的字段)的视图。

举例:定义一个视图用以查看所有学生的学号、姓名、出生年份。

2.根据EDUC数据库,分析如下问题:

1)举例说明,在定义的视图上进行查询、插入、更新和删除操作,分情况(查询、更新)讨论哪些操作可以成功完成,哪些不能成功完成,并分析原因。

2)举例说明,WITH CHECK OPTION语句的作用。

 

分别给出对应题目的代码及运行结果截图:

1、

1.根据EDUC数据库,按如下要求设计视图:

1)基于单个表按投影操作定义视图。

举例:定义一个视图用以查看所有学生的学号、姓名和年龄。

CREATE view student_1

AS

SELECT Sno,Sname,Sage

FROM student;

2)基于单个表按选择操作定义视图。

举例:定义一个满足性别=‘男’的学生的所有信息的视图。

CREATE VIEW student_2

AS

SELECT *

FROM student

WHERE Ssex='男';

3)基于多个表根据连接操作定义视图。

举例:定义一个视图用以查看所有学生的学号、姓名、课名、成绩。

CREATE VIEW student_3

AS

SELECT student.Sno,Sname,Cname,Grade

FROM sc,student,course

WHERE sc.Sno=student.Sno AND sc.Cno=course.Cno;

4)基于多个表根据嵌套查询定义视图。

举例1:定义一个比所有‘CS’系的学生年龄都小的学生的信息的视图

CREATE VIEW student_4

AS

SELECT *

FROM student

WHERE Sage<ALL

(SELECT Sage

FROM student

WHERE Sdept='CS');

举例2:定义一个视图用以查看年龄大于该系平均年龄的学生的学号、姓名。

CREATE VIEW student_5(Sno,Sname)

AS

SELECT Sno,Sname

FROM student s1

WHERE Sage>

(SELECT AVG(Sage)

FROM student s2

WHERE s1.Sdept=s2.Sdept);

5)定义含有虚字段(即基本表中原本不存在的字段)的视图。

举例:定义一个视图用以查看所有学生的学号、姓名、出生年份。

CREATE VIEW student_6(Sno,Sname,createdate)

AS

SELECT Sno,Sname,YEAR(NOW())-Sage

FROM student;

2、

2.根据EDUC数据库,分析如下问题:

1)举例说明,在定义的视图上进行查询、插入、更新和删除操作,分情况(查询、更新)讨论哪些操作可以成功完成,哪些不能成功完成,并分析原因。

一.1号视图

1.在1号视图中找出年龄大于19岁的学生。

SELECT *

FROM student_1

WHERE Sage>19;

2.在1号视图中插入一名学号‘01’,姓名‘真烦’,年龄‘100’的学生。

INSERT

INTO student_1

VALUES('01','真烦','100');

3.在1号视图中将‘01’号学生的姓名改为‘真麻烦’。

UPDATE student_1

SET Sname='真麻烦'

WHERE Sno='01';

4.在1号视图中删除学号为‘01’的学生。

DELETE

FROM student_1

WHERE Sno='01';

二.2号视图

1.在2号视图中查询‘CS’系的学生。

SELECT *

FROM student_2

WHERE Sdept='CS';

2.在2号视图中插入两名学生记录,信息分别为:‘01’,‘麻烦’,’男’,’10’,’IS’。和‘02’,‘坑人’,‘女’,‘111’,‘AS’。

INSERT

INTO student_2

VALUES('01','麻烦','男','10','IS'),

('02','坑人','女','111','AS');

3.在2号视图中,将01号学生的系名改为‘QW’。

UPDATE student_2

SET Sdept='QW'

WHERE Sno=01;

4.在2号视图中,删除01号学生记录。

DELETE

FROM student_2

WHERE Sno='01';

三.3号视图。

1.在3号视图中查询成绩大于85的学生的信息。

SELECT *

FROM student_3

WHERE Grade>85;

2.在3号视图中,插入一名学号为‘011’,姓名为‘累死了’,课名为‘数据库’,成绩为‘100’的学生。

INSERT

INTO student_3(Sno,Sname,Cname,Grade)

VALUES('011','累死了','数据库',100);

3.在3号视图中,将李勇的数学成绩改为90。

UPDATE student_3

SET Grade='90'

WHERE Sname='李勇' AND Cname='数学';

4.在3号视图中,删除李勇的信息系统成绩。

DELETE

FROM student_3

WHERE Sname='李勇' AND Cname='信息系统';

四.4号视图。

1.在4号视图中,查询所有男生的信息。

SELECT *

FROM student_4

WHERE Ssex='男';

2.在4号视图中,插入一名学号为‘007’,姓名为‘要死人了’,年龄为‘1’的学生记录。

INSERT

INTO student_4(Sno,Sname,Sage)

VALUES('007','要死人了',1);

3.在4号视图中,将王敏的系名改为‘QQ’。

UPDATE student_4

SET Sdept='QQ'

WHERE Sname='王敏';

4.在4号视图中,删除年龄小于10岁的学生的记录。

DELETE 

FROM student_4

WHERE Sage<10;

五.5号视图。

1.查询所有学生的记录。

SELECT *

FROM student_5;

2.插入‘007’‘王者’的学生记录。

INSERT

INTO student_5

VALUES('07','王者');

3.5号视图中,将所有学生的名字改为‘啊啊啊啊啊’。

UPDATE student_5

SET Sname='啊啊啊啊啊';

4.删除男生的记录。

DELETE 

FROM student_5

WHERE Sname='李勇';

六.6号视图。

1.查询出生年份在2005年及之前的学生记录。

SELECT *

FROM student_6

WHERE createdate<='2005';

2.插入一个‘08’,‘终于写完了’,‘1945’的学生记录。

INSERT 

INTO student_6

VALUES('08','终于写完了',1945);

3.将王者同学的出生日期改为1945。

UPDATE student_6

SET createdate='1945'

WHERE Sname='王者';

4.删除王者同学的纪录。

DELETE

FROM student_6

WHERE Sname='王者';

分情况讨论:

查询时:只有满足建立视图时的子查询的条件的记录才能被查询到。

更新时:基于单个表的投影、选择操作建立的视图可以更新。基于多个表的连接操作建立的视图无法插入和删除,可以修改。原因:插入和删除会同时涉及多个表,所以不行。基于多个表的嵌套查询定义的视图不能插入和删除,部分可插入。原因:涉及到多个表。定义含有虚字段的视图不能插入和更新,可以删除。原因:视图中含有不存在于表中的虚字段。

2)举例说明,WITH CHECK OPTION语句的作用。

定义一个和2号视图相同但带有with check option的视图。

CREATE VIEW student_22

AS

SELECT *

FROM student

WHERE Ssex='男'

WITH CHECK OPTION;

作用如下:

1.1、在2号视图上插入‘01’,‘麻烦’,’男’,’10’,’IS’。

INSERT

INTO student_2

VALUES('01','麻烦','男','10','IS');

2.1、在22号视图上插入‘02’,‘坑人’,‘女’,‘111’,‘AS’。

INSERT

INTO student_22

VALUES('02','坑人','男','111','AS');

1.2、在2号视图上插入‘03’,‘真累’,‘女’的学生记录。

INSERT

INTO student_2(Sno,Sname,Ssex)

VALUES('03','真累','女');

2.2、在22号视图上插入‘04’,‘真累’,‘女’的学生记录。

INSERT

INTO student_22(Sno,Sname,Ssex)

VALUES('04','真累','女');

1.3、在2号视图上插入‘05’,‘忙’的学生记录。

INSERT

INTO student_2(Sno,Sname)

VALUES('05','忙');

2.3、在22号视图上插入‘06’,‘忙’的学生记录

INSERT

INTO student_22(Sno,Sname)

VALUES('06','忙');

总结:

让我学会了基于各种条件建立视图。学会了在各种视图上进行增删改查操作。明白了with check option只在对视图插入操作时有影响。明白了修、删、查操作时,在条件上自动加子查询中的条件。尤其重要的是,让我学会了各种举例子的方法,我现在强的可怕,举例子的能力已经登峰造极!!!

问题:有好多例子实在是编不出来了。

解决方法:通过互联网的启发找到了举例子的灵感。

运用:

视图的作用:

1. 视图能够简化用户(程序员)的操作。

2. 视图使用户(程序员)能以多种角度看待同一数据。

3. 视图对重构数据库提供了一定程度的逻辑独立性 。

4. 视图能够对机密数据提供安全保护。

5. 适当的利用视图可以更清晰的表达查询。

举例:

  1. 基于书籍表定义一个视图用于查看书价大于11元的书籍信息。

CREATE VIEW b_1

AS

SELECT *

FROM b

WHERE Price>11

WITH CHECK OPTION;

  1. 在1号书籍视图中查看所有的书的信息。

SELECT *

FROM b_1;

  1. 在1号书籍视图中查看最贵的书的信息。

SELECT *

FROM b_1

WHERE Price=

(SELECT MAX(Price)

FROM b_1);

  1. 在1号书籍视图中插入一本书号为04,书名为‘啊啊烦’,书价为‘100’的书的记录。

INSERT

INTO b_1(Bno,Bname,Price)

VALUES('04','啊啊烦','100');

  1. 在1号书籍视图中将‘B1’号图书的价格增加100。

UPDATE b_1

SET Price=Price+100

WHERE Bno='B1';

  1. 在1号书籍视图中删除‘B5’号图书的记录。

DELETE

FROM b_1

WHERE Bno='B5';

 


http://www.kler.cn/a/597893.html

相关文章:

  • 为WordPress自定义一个留言板
  • Nginx请求头Hos头攻击
  • 解决Centos使用yum命令报错“Cannot find a valid baseurl for repo: base/7/x86_64”问题
  • 服务器负载均衡
  • 计算机视觉yolov8模型应用-学习笔记
  • mujoco传感器数据读取的正确姿势
  • 基于深度学习的图片识别系统(上)
  • DFS深搜
  • AI开源项目
  • 优选算法的睿智之林:前缀和专题(一)
  • 2.2.盈亏平衡分析
  • MySQL 索引下推
  • React 18 如何定义变量,及赋值 与渲染
  • Linux常用的命令
  • [AI速读]混合验证方案:如何高效解决RISC-V向量扩展的验证难题
  • Nginx如何处理请求
  • Modbus协议编程读写流程图大全
  • DeepSeek对KVM环境下创建共享iSCSI存储的指导
  • 使用单调栈在O(n)时间复杂度内计算直方图中的最大矩形面积
  • 数据可视化在商业智能中的应用:从数据到洞察的桥梁