SQL Server学习笔记——视图
Posted Aiden_Zhao
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL Server学习笔记——视图相关的知识,希望对你有一定的参考价值。
SQL Server学习笔记——视图
视图是从一个或几个基本表(或视图)导出的表。不同的是,它是一张虚表,数据库中只存放视图的定义,而不存放视图对应的数据,这些数据仍然存放在原本的基本表中。所以一旦基本表发生改变,从视图中查询的数据也就随之改变。
1. 查询学生信息(sno, sname, age)
使用单表查询:
select sno, sname, age from stu
查询结果为:
使用视图:
create view v_stu as select sno, sname, age from stu --创建视图
select * from v_stu
查询结果为:
与使用单表查询的结果一模一样。为了理解这一句话:“一旦基本表发生改变,从视图中查询的数据也就随之改变”,举下面一个栗子:
create view v_major as select * from major
select * from v_major
结果为:
执行一条删除语句:
delete from major where mno='5'
之后,再执行v_major的查询语句:
select * from v_major
结果为:
可见,控制工程专业已被删除。
2. 查询学生信息(sno, sname, mname)
create view v_stu2 as
select stu.sno, stu.sname, major.mname from stu left outer join major on stu.mno = major.mno
select * from v_stu2
查询结果为:
3. 查询学生的信息(sno, avg(grade))
create view v_stu3 as
select sno, avg(grade) as avg_grade from sc group by sno
查询结果为:
4. 查询每位同学较自己平均分高的课程(cno)
在上一个例子中已经建立了学生的平均分视图,则此例子的查询语句可以这么写:
select sc.sno, cno from sc, v_stu3 where sc.sno = v_stu3.sno and sc.grade > v_stu3.avg_grade
查询结果为:
与使用嵌套查询:
select sno, cno from sc t1 where grade > (select avg(grade) as avg_grade from sc t2 group by sno having t1.sno = t2.sno)
的结果一致。
以上是关于SQL Server学习笔记——视图的主要内容,如果未能解决你的问题,请参考以下文章
数据库原理与应用(SQL Server)笔记 第五章 索引和视图