SQL语句(十五)视图

视图

实际上是一个查询语句, 如果将子查询保存为视图,

就可以将子查询的结果当作数据表使用 从而来简化查询语句

  • 引言

    • 例1 查询参加"数据库技术"课程的考试的学生学号、姓名、班级、分数

      • 需要连接学生表, 成绩表 和 课程表

    • 查询航天班各课程的考试信息, 显示学生的学号、姓名、课程名称、分数

      • 也需要连接学生表, 成绩表 和 课程表

    • 由于数据库连接查询语句麻烦,可以先写一个一般的等值连接, 将三个表连接起来

use teaching
select * from Student
select * from Course
select * from Study

--连接学生表, 成绩表, 课程表
Select a.sclass, a.Snumb, a.sname, a.sgender,
c.cname, b.score, c.chours, c.credit
from Student as a
INNER JOIN Study as b  on a.snumb = b.snumb
INNER JOIN Course as c on b.cnumb= c.cnumb

--由于上述查询经常使用, 所以将之保存为视图
--CREATE VIEW 视图名 [(字段别名列表)]
--AS
--查询

Create View examinfo
AS
Select a.sclass, a.Snumb, a.sname, a.sgender,
c.cname, b.score, c.chours, c.credit
from Student as a
INNER JOIN Study as b  on a.snumb = b.snumb
INNER JOIN Course as c on b.cnumb= c.cnumb


--加别名
GO
Create View examinfo2(班级,学号,姓名,性别,课程,成绩,学时,学分)
AS
Select a.sclass, a.Snumb, a.sname, a.sgender,
c.cname, b.score, c.chours, c.credit
from Student as a
INNER JOIN Study as b  on a.snumb = b.snumb
INNER JOIN Course as c on b.cnumb= c.cnumb

--4.使用视图

--查询所有学生的所有课程的考试成绩
--显示班级,学号,姓名,性别,课程,成绩,学时,学分
select * from examinfo2

--查询参加"c++"课程的考试的学生的
--班级,学号,姓名,性别,课程,成绩,学时,学分
select * from examinfo2
where 课程 = 'c++'

--查询"航天"班各课程考试的信息,显示学号,姓名,课程名称,分数

Select Snumb, Sname, Cname, Score
From examinfo
where Sclass = '航天'

--例2 查询平均年龄大于20岁的班级的学生信息
Select *
From Student
where sclass in (
select sclass as 班级 from Student
group by sclass
having avg(sage) >= 20
)

--使用视图
--创建视图
Create View myClass
AS
select Sclass as avgage from Student
group by Sclass
having AVG(sage) >= 20

--使用视图
Select * From Student
Where sclass in (
select * from myClass
)

--删除视图
Drop View Myclass

注意事项:

  • 视图是一个虚拟表或临时表

  • 视图保存的是Select查询语句,而不是数据本身

  • 数据表中的数据发生改变,通过视图查到的数据也会发生改变

  • 创建视图时,不允许使用

    ORDER BY, INTO 等字句

  • 如果一个查询或子查询经常使用,则保存为视图

原文地址:https://www.cnblogs.com/douzujun/p/6654942.html