SQL Server学习笔记——视图

SQL Server学习笔记——视图

视图是从一个或几个基本表(或视图)导出的表。不同的是,它是一张虚表,数据库中只存放视图的定义,而不存放视图对应的数据,这些数据仍然存放在原本的基本表中。所以一旦基本表发生改变,从视图中查询的数据也就随之改变

1. 查询学生信息(sno, sname, age)
使用单表查询:

select sno, sname, age from stu

查询结果为:
SQL Server学习笔记——视图_第1张图片

使用视图:

create view v_stu as select sno, sname, age from stu --创建视图
select * from v_stu

查询结果为:
SQL Server学习笔记——视图_第2张图片
与使用单表查询的结果一模一样。为了理解这一句话:“一旦基本表发生改变,从视图中查询的数据也就随之改变”,举下面一个栗子:

create view v_major as select * from major
select * from v_major

结果为:
SQL Server学习笔记——视图_第3张图片
执行一条删除语句:

delete from major where mno='5'

之后,再执行v_major的查询语句:

select * from v_major

结果为:
SQL Server学习笔记——视图_第4张图片
可见,控制工程专业已被删除。

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

查询结果为:
SQL Server学习笔记——视图_第5张图片
3. 查询学生的信息(sno, avg(grade))

create view v_stu3 as
select sno, avg(grade) as avg_grade from sc group by sno

查询结果为:
SQL Server学习笔记——视图_第6张图片
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学习笔记,sql,mysql,数据库,sqlserver)