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

Microsoft SQL Server 代码片段收集

缺少 SQL SERVER 2014 代码片段

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

使用实体框架迁移时 SQL Server 连接抛出异常 - 添加代码片段

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