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