创建视图()
对于视图的基本形式来说将一个查询转换为一个视图非常简单只需要在查询之前添加一个CREATE VIEW语句并为新创建的视图定义一个名称即可例如
CREATE VIEW vwBooksONshelves
AS
SELECT
loc_bookcase AS bookcase
loc_shelf AS shelf
loc_position_left AS position
bk_title AS title
FROM location INNER JOIN books
ON locationfk_bk_loc = booksbk_id;
这样就创建了一个视图接下来就可以使用简单的SELECT *语法来查询该视图例如下面的例子
SELECT * FROM vwBooksONshelves;
表列出了查询视图的结果它与定义视图的查询产生的结果完全相同
表 将两个表的JOIN查询包装到一个视图的结果
(续表)
视图具有多种用途例如封装复杂性强制安全性等本章随后还将非常详细地讨论这些功能在各个RDBMS中CREATE VIEW语句可能会带有相当多的特定于RDBMS的选项但前面例子中的语法是通用的在本书所讨论的每一种RDBMS中都可以正常运行
本书中介绍的任何一个SQL查询(DQL类型的)几乎都可以转换为一个视图但也有一些例外在某些RDBMS中带有ORDER BY子句的查询不能用在视图的定义中(但是GROUPBY子句则可以)因此某些RDBMS不允许使用执行排序功能的关键字(DISTINCTFIRST等)例如HSQLDB和MySQL允许在视图中使用ORDER BY子句但OracleMicrosoftAccessPostgreSQL和IBM DB则不允许使用ORDER BY子句任何一种RDBMS都不允许视图引用自身(这会产生一个循环引用)也不允许引用暂态的结构例如临时表(请参考第章)
Microsoft Access是一个融合了数据库和程序设计构造的集成环境可以将它作为其他RDBMS的前端但是这种功能具有很多限制例如在本章讨论的环境中Microsoft Access数据库引擎并不支持使用CREATE VIEW语句(就这一点而言也包括其他任何DDL语句)对非Microsoft Access引擎的数据库创建视图
如果数据库中已经存在同名的表或视图RDBMS将抛出一个错误某些RDBMS(OraclePostgreSQL和MySQL)提供了替代的REPLACE关键字用于解决这一情况(在其他数据库中在创建同名视图之前必须先将已经存在的视图删除掉)例如
CREATE OR REPLACE VIEW vwbooksONshelves
AS
SELECT
loc_bookcase AS bookcase
loc_shelf AS shelf
loc_position_left AS position
bk_title AS title
FROM location INNER JOIN books
ON locationfk_bk_loc = booksbk_id;
开发人员可以轻而易举地创建视图以便限制用户只能使用数据的某个子集子集既可以是纵向的(通过限定视图暴露的列数)也可以是横向的(通过限制返回记录的数量)
根据某种命名约定来命名数据库对象是一个良好的编程实践例如可以在视图名称前添加前缀vw使视图与表区分开来
返回目录SQL实战新手入门
编辑推荐
Oracle索引技术
高性能MySQL
数据仓库与数据挖掘培训视频教程