三-(七) 视图(2020-4-3 )

一些知识点
  1. 视图性质:
    • 虚表:从一个表或几个表(或视图)导出的表
    • 只存放视图的定义,不会出现数据冗余
    • 基表中的数据发生变化,从视图中查询出的数据也随之改变
  2. 最多的操作是 查询
  3. 透过视图进行增删改查操作的时候,不得破坏视图定义中的谓词条件
  4. 行列子集视图:行列子集视图:去除了某些行和列,保留了
  5. 作用
    • 能够简化用户操作
    • 可以使用户以多种角度看待同一数据
    • 对重构数据库提供了一定程度的逻辑独立性
    • 能够对机密数据提供安全性的保护
    • 可以更加清晰的表达查询
一些例子

1.建立信息系学生的视图,包括学号,姓名,年龄

create view is_student(sno,sname,sage)
as/*来自哪张表*/
select sno,sname,sage
from student
where sdept='IS';
--查询
select *
from is_student
--插入(不常用)
insert into is_student/*实际插入的是student表*/
values('201215131','杨康',19)
  • with check option :对视图正确与否很重要
create view is_student1(sno,sname,sage)
as/*来自哪张表*/
select sno,sname,sage
from student
where sdept='IS'
with check option/*加上约束,这样插入的数据就只能是 sno,sname,sage 插入,不可以插入别的属性*/
--插入数据
insert into is_student1/*实际插入的是student表*/
values('201215132','洪七公',38)

2.建立信息系选修了1号课程的学生视图,包括学号,姓名 成绩

 create view is_s1(sno,sname,grade)
 as
 select student.sno,sname,grade
 from student,sc
 where student.sno=sc.sno and
	   sdept='IS' and
	   cno='1'

select *
from is_s1

3.查询信息系选修了1号课程并且成绩大于90的信息

create view is_s2  /*省略了字段*/
as
select * 
from is_s1   /*is_s2的字段会和is_s1一样*/
where grade>90

select *
from is_s2

4.建立学生基本情况的视图,包括 学号 姓名 出生年份

create view bt_s(sno,sname,sbirth)/*由于2020-sage没有名字,所以在这里必须注明字段*/
select sno,sname,2020-sage
from student
  • 三种情况下必须加字段
    • 计算
    • 聚集函数
    • 连接的表
      5.建立每个学生以及他平均成绩的视图
create view s_g(sno,Gavg)
as
select sno,avg(grade)
from sc
group by sno

select *
from s_g

6.建立所有女同学的视图,包括所有属性

create view f_student(no,name,sex,sage,sdept)
as
select sno,sname,ssex,sage,sdept
from student
where ssex='女'

select*
from f_student
删除视图
drop view is_student
drop view is_s1/*按理说不能删,因为is_s2是由is_s1推导出来的,但是在这个里面可以删*/
drop view is_s2/*由于已经删除了is_s1,所以is_s2已经没有用了*/
视图应用 与 视图消解

1.在信息系学生的视图中找到年龄小于20的学生

select *
from is_student
where sage<20
--视图消解
--select sno,sname,sage
--from student
--where sage<20 and sdept='IS'

2.查找平均成绩大于90分

select sno,gavg
from s_g
where gavg>90
--视图消解 有聚集函数的消解为  having
select sno,avg(grade)
from sc
group by sno
having avg(Grade)>90 /*where子句中不可以出现聚集函数*/
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值