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物化视图学习笔记

数据库原理与应用(SQL Server)笔记 第五章 索引和视图

SQL Server 视图何时更新?

SQL Server 2012 案例教程(贾祥素)——学习笔记

C# 学习笔记(17)操作SQL Server 上

sql server 学习笔记