SQL

SQL 知识量:22 - 44 - 129

18.1 视图><

什么是视图- 18.1.1 -

视图是虚拟的表,它并不是真实存在于数据库的表,视图本质上是检索数据时动态构建的查询。

例如:查询学生信息及选课信息,按照学生姓名排序。

select student.*,lesson.name as lname
from student,lesson,course 
where student.id=course.id_student and lesson.id=course.id_lesson 
order by student.name;

结果:

+----+-------+-----+--------+---------+
| id | name  | age | sex    | lname   |
+----+-------+-----+--------+---------+
|  3 | Bob   |  11 | male   | English |
|  2 | Jame  |  12 | male   | Natural |
|  2 | Jame  |  12 | male   | Maths   |
|  5 | Jen   |  11 | female | English |
|  5 | Jen   |  11 | female | Natural |
|  4 | Robot |  10 | male   | Natural |
|  4 | Robot |  10 | male   | Maths   |
|  4 | Robot |  10 | male   | English |
|  1 | Susan |  11 | female | Maths   |
|  1 | Susan |  11 | female | English |
|  6 | Toney |  10 | male   | Natural |
|  6 | Toney |  10 | male   | Maths   |
+----+-------+-----+--------+---------+

如果将以上查询包装成对一个虚拟表(例如:取名为A)的查询,一切就简单了。

select * from A;

A实际替换的是一个复杂的联结查询,视图就是查询,这就是视图的本质。

注意:Microsoft Access不支持视图。

视图的作用- 18.1.2 -

视图的作用,即优点主要有以下几点:

  • 可以重用SQL语句。

  • 可以简化复杂的SQL操作,可以方便的使用,而不需要关心实现的细节。

  • 可以使用表的一部分而不是全部。

  • 可以保护数据。

  • 可以更改数据格式和表示,即可以返回与底层表的格式和表示不同的数据。

创建视图后,就可以像使用其他数据表一样使用视图。重要的一点是,视图只是用来查看存储在别处数据的一种工具,它本身不包含数据,只是一些查询语句,返回的是其他表中检索的数据。因此,如果改变了那些表的数据,视图返回的数据也会改变。

视图的规则和限制- 18.1.3 -

视图的常见规则和限制如下:

  • 视图的名称必须唯一(与表的名称也不能重复)。

  • 创建视图的数量没有限制。

  • 要创建视图,必须要有足够的权限。视图包含的SQL操作必须全部获得授权。

  • 视图可以嵌套。

  • 许多DBMS禁止在视图查询中使用order by子句。

  • 有些DBMS要求对返回的所有列进行命名,如果是计算字段,则需要使用别名。

  • 视图不能索引,也不能有关联的触发器或默认值。

  • 有些DBMS规定,视图是只读的。

  • 有些DBMS要求,不能做出导致行不再属于视图的操作。

每种DBMS对于视图的规定存在差异,使用时还需参阅具体文档。