实验九 视图的使用

实验九 视图的使用

一、实验目的

1.熟悉视图的操作。

二、实验内容及要求

用SQL语句完成下列功能。使用数据库为SCHOOL数据库。

1.建立一视图View_CSTeacher,列出计算机系各个老师的资料(姓名、性别、职称)。

sql 复制代码
create view View_CSTeacher(姓名,性别,职称)
as
select teac_id,teac_sex,techpost
from teacher t,deparment d
where t.depar_id=d.depar_id

select * 
from View_CSTeacher

2.建立一视图View_Class,列出每个班级的名称、系别和班级人数。

java 复制代码
```sql
--1.create view必须是批处理中仅有的语句
--解决:加入go
--2.当使用 COUNT() 函数时,您需要指定 GROUP BY 子句来按照哪些字段进行分组

create view View_Class(名称,系别,班级人数)
as
select c.class_name,d.depar_name,count(c.class_id) as '班级人数'
from student s,deparment d,class c
where c.depar_id = d.depar_id and s.class_id = c.class_id
group by c.Class_name,d.Depar_name,s.Class_id
go

select * 
from View_Class

3.建立一视图View_Student,列出每个学生的学号、选修课程门数和平均成绩,并按平均成绩从大到小排列。(体验在视图中使用order by。注意观察视图中数据是否实现按成绩排序?为什么?)

sql 复制代码
--视图中数据并未实现按成绩排序,因为不被允许在视图中使用ORDER BY 。
create view View_Student(学号,选修课程门数,平均成绩)
as
select stu_id,count(course_id) as '选修课程门数',avg(grade) as '平均成绩'
from studentgrade
group by stu_id
go

select * 
from View_Student

drop view View_Student

4.查询平均成绩大于85分的学生的所有信息。(要求使用视图View_Student完成查询)

sql 复制代码
select *
from View_Student
where 平均成绩 >= 85

5.修改视图View_Student(修改视图定义),列出每个学生的学号、姓名、选修课程门数和平均成绩。

sql 复制代码
alter view View_Student
as
select sg.stu_id,s.stu_name,count(sg.Course_id) as '选修课程门数',avg(sg.Grade) as '平均成绩'
from studentgrade sg join student s on sg.stu_id = s.stu_id
group by sg.stu_id,s.stu_name

select * 
from View_Student

6.要通过视图View_Student,将学号为"000503002"的平均成绩改为90分,是否可以实现?并说明原因

sql 复制代码
--对视图或函数 'View_Student' 的更新或插入失败,因其包含派生域或常量域。

update View_Student
set 平均成绩='90'
from View_Student
where  Stu_id='000503002'

7.删除视图View_CSTeacher。

sql 复制代码
drop view View_CSTeacher

8.建一视图View_Studentnum,列出每个班级信息以及班级人数。

sql 复制代码
create view View_Studentnum
as
select c.*,count(s.class_id) as '班级人数'
from class c,student s
where c.class_id = s.class_id
group by c.Class_id,c.Class_id,c.Class_name,c.Depar_id,c.Director,c.Monitor

select * 
from View_Studentnum

三、实验小结

1.试述视图的优点;思考基本表与视图的区别和联系。

视图的优点:

1.视点集中

2.简化操作

3.定制数据

4.合并分割数据

5.安全

视图是一个或多个表依照某个条件组合而成的虚拟集。

2.是否所有视图都可以更新?为什么?举例说明哪些视图不能更新。

并非所有视图都可以更新。比如题目6,含有更新的数据中含有派生域或者常量域是不能更新的。

相关推荐
wafrdggh1 小时前
2026电商快递批量查询怎么用?固乔助手模板设置评测
大数据·数据库·小程序
一个天蝎座 白勺 程序猿1 小时前
KingbaseES数据库归档重做日志文件管理:从配置到运维的实战指南
运维·数据库·oracle·kingbasees·金仓数据库
红尘散仙2 小时前
谁说终端只能敲键盘?我用 Rust 给小说阅读器加上了鼠标
前端·后端·rust
陈随易3 小时前
C++26 草案被否,二十八年来头一回
前端·后端·程序员
ZhengEnCi3 小时前
Agent 工具怎么折叠海量输出才「爽」:Trae、Claude Code 的渐进式披露设计原理
前端·agent
龙腾AI白云5 小时前
仿真到现实(Sim-to-Real)迁移:跨越仿真与现实鸿沟
数据库·机器学习·plotly·知识图谱·tornado
IT_陈寒6 小时前
Redis内存暴涨,没想到是AOF重写捣的鬼
前端·人工智能·后端
ikoala6 小时前
让 Codex 自己查账:一个省 token 的小技巧
前端·后端·ai编程
ikoala6 小时前
AI 写页面像说明书,修 Bug 像贴膏药?把这两句话写进 AGENTS.md
前端·javascript·ai编程
freejackman7 小时前
【实战二】字段级血缘追踪:拆解 AST 迷局,精准穿透函数链与子查询
大数据·数据库·sql