SELECT [ ALL | DISTINCT [ ON ( expression [, ...] ) ] ] * | expression [ AS output_name ] [, ...] INTO [ TEMPORARY | TEMP ] [ TABLE ] new_table [ FROM from_item [, ...] ] [ WHERE condition ] [ GROUP BY expression [, ...] ] [ HAVING condition [, ...] ] [ { UNION | INTERSECT | EXCEPT } [ ALL ] select ] [ ORDER BY expression [ ASC | DESC | USING operator ] [, ...] ] [ LIMIT { count | ALL } ] [ OFFSET start ] [ FOR { UPDATE | SHARE } [ OF table_name [, ...] ] [ NOWAIT ] ]
SELECT INTO 从一个查询的计算结果中创建一个新表。 数据并不返回给客户端,这一点和普通的 SELECT 不同。 新表的字段具有和 SELECT 的输出字段相关联(相同)的名字和数据类型。
如果声明了这个关键字,那么该表是作为一个临时表创建的。 请参考 CREATE TABLE 获取细节。
要创建的表的表名(可以有模式修饰)。
所有其它输入的域都在 SELECT 中有详细描述。
CREATE TABLE AS 的作用和 SELECT INTO 类似。 我们建议使用 CREATE TABLE AS 语法, 因为 SELECT INTO 不是标准语法。 实际上,这种类型的 SELECT INTO 是不能在 ECPG 或者 PL/pgSQL 中使用的, 因为它们对 INTO 子句的解释是不同的。 而且,CREATE TABLE AS 提供了一个 SELECT INTO 所提供功能的超集。
在 PostgreSQL 8.1 以前,SELECT INTO 创建的表总缺省是包含 OID。 到了 PostgreSQL 8.1, 这不再是缺省了 — 要想在新表中包含 OID, 比如打开配置参数 default_with_oids。 另外,CREATE TABLE AS 可以使用 WITH OIDS 子句。
创建一个新表 films_recent, 它值包含来自 films 的最近的条目:
SELECT * INTO films_recent FROM films WHERE date_prod >= '2002-01-01';
SQL 标准用 SELECT INTO 表示选取数值到一个宿主程序的标量变量中, 而不是创建一个新表。SQL92 的用法实际上就是在 ECPG (参阅 Chapter 30)和PL/pgSQL (Chapter 36)里的用途。 PostgreSQL 用 SELECT INTO 代表创建表的意思是历史原因。 在新代码里我们最好使用 CREATE TABLE AS 实现这个目的。