CREATE VIEW 定义一个查询的视图. 这个视图不是物理上实际存在(于磁盘)的.具体的说,自动生成 一个改写索引规则( 一个 ON SELECT 规则) 的查询用以支持在视图上的检索.
CREATE OR REPLACE VIEW 类似,不过是如果一个同名 的视图已经存在,那么就替换它。你只能用一个生成相同字段的新查询替换 一个视图(也就是说,同样字段名和数据类型)。
如果给出了一个模式名(比如,CREATE VIEW myschema.myview ...),那么该视图是在指定的模式中创建的. 否则它是在当前模式中创建的(在搜索路径前面的那个; 参阅 CURRENT_SCHEMA()).该视图名字必需和同一模式中任何其它 视图,表,序列或者索引的名字不同.
目前,视图是只读的∶系统将不允许在视图上插入,更新,或者删除数据. 你可以通过在视图上创建把插入等动作重写为向其它表做合适操作的规则来 实现可更新视图的效果.更多信息详见 CREATE RULE.
使用 DROP VIEW 语句删除视图.
创建一个由所有 Comedy (喜剧)电影组成的视图:
CREATE VIEW kinds AS SELECT * FROM films WHERE kind = 'Comedy'; SELECT * FROM kinds; code | title | did | date_prod | kind | len -------+---------------------------+-----+------------+--------+------- UA502 | Bananas | 105 | 1971-07-13 | Comedy | 01:22 C_701 | There's a Girl in my Soup | 107 | 1970-06-11 | Comedy | 01:36 (2 rows)
SQL92 为 CREATE VIEW 声明了一些附加的功能:
CREATE VIEW view [ column [, ...] ] AS SELECT expression [ AS colname ] [, ...] FROM table [ WHERE condition ] [ WITH [ CASCADE | LOCAL ] CHECK OPTION ]
完整的SQL92命令可选的子句是:
这个选项用于可更新视图. 所有对视图的INSERT和UPDATE都要经过视图定义条件的校验. 如果 没有通过校验,更新将被拒绝.
对这个视图进行完整性检查.
对此视图和任何相关视图进行完整性检查. 在既没有声明 CASCADE 也没有声明 LOCAL 时,假设为 CASCADE.
CREATE OR REPLACE VIEW 是 PostgreSQL 的扩展。