CREATE TABLE AS
CREATE TABLE AS#
CREATE TABLE AS
CREATE TABLE AS — 从一个查询的结果创建一个新表
大纲
CREATE [ [ GLOBAL | LOCAL ] { TEMPORARY | TEMP } | UNLOGGED ] TABLE [ IF NOT EXISTS ] table_name
    [ (column_name [, ...] ) ]
    [ WITH ( storage_parameter [= value] [, ... ] ) ]
    [ TABLESPACE tablespace_name ]
    AS query
    [ WITH [ NO ] DATA ]
描述
CREATE TABLE AS创建一个表,并且用
由一个SELECT命令计算出来的数据填充
该表。该表的列具有和SELECT的输出列
相关的名称和数据类型(不过可以通过给出一个显式的新列名列表来覆
盖这些列名)。
CREATE TABLE AS和创建一个视图有些
相似,但是实际上非常不同:它会创建一个新表并且只计算该查询一次
用来初始填充新表。这个新表将不会跟踪该查询源表的后续变化。相反,
一个视图只要被查询,它的定义SELECT 语句就会被重新计算。
参数
- GLOBAL或者- LOCAL
- 为兼容性而忽略。不推荐使用这些关键词,详见 CREATE TABLE。 
- TEMPORARY或者- TEMP
- 如果被指定,该表会被创建为一个临时表。详见 CREATE TABLE。 
- UNLOGGED
- 如果被指定,该表会被创建为一个不做日志的表。详见 CREATE TABLE。 
- IF NOT EXISTS
- 如果已经存在一个同名的关系时不要抛出错误。这种情况下会发出一个 提示。详见CREATE TABLE。 
- ``table_name``
- 要创建的表的名称(可以被模式限定)。 
- ``column_name``
- 新表中一列的名称。如果没有提供列名,会从查询的输出列名中得到。 
- WITH ( storage_parameter[= ``value``] [, … ] )
- 这个子句为新表指定可选的存储参数,详见 存储参数。 为了向后兼容,表的 - WITH子句也能包含- OIDS=FALSE来指定新表的行将不包含OID(对象标识符)。- OIDS=TRUE不再支持。
- TABLESPACE tablespace_name
- ``tablespace_name`` 是要在其中创建新表的表空间名称。如果没有指定,将会查询使用 ``default_tablespace`` 
- ``query``
- 一个 - SELECT、- TABLE或者- VALUES命令。
- WITH [ NO ] DATA
- 这个子句指定查询产生的数据是否应该被复制到新表中。如果不是,只有 表结构会被复制。默认是复制数据。 
注解
这个命令在功能上类似于SELECT INTO,但是它更好,
因为不太可能被SELECT INTO语法的其他使用混淆。更
进一步,CREATE TABLE AS提供了
SELECT INTO的功能的一个超集。
示例
创建一个新表films_recent,它只由表
films中最近的项组成:
CREATE TABLE films_recent AS
  SELECT * FROM films WHERE date_prod >= '2002-01-01';
要完全地复制一个表,也可以使用TABLE命令的 简短形式:
CREATE TABLE films2 AS
  TABLE films;
兼容性
CREATE TABLE AS符合 SQL标准。下面的是非标准扩展:
- 标准要求在子查询子句周围有圆括号,在 OushuDB中这些圆括号是可选的。 
- 在标准中, - WITH [ NO ] DATA子句是必要的,而 OushuDB 中是可选的。
- OushuDB处理临时表的方式和标准不同。 详见CREATE TABLE。 
- WITH子句是一种 OushuDB扩展, 标准中没有存储参数。
- OushuDB的表空间概念是标准的 一部分。因此,子句 - TABLESPACE是一种扩展。