## 选择进入 SELECT INTO — 根据查询结果定义一个新表 ## 概要 ``` [ WITH [ RECURSIVE ] with_query [, ...] ] SELECT [ ALL | DISTINCT [ ON ( expression [, ...] ) ] ] * | expression [ [ AS ] output_name ] [, ...] INTO [ TEMPORARY | TEMP | UNLOGGED ] [ TABLE ] new_table [ FROM from_item [, ...] ] [ WHERE condition ] [ GROUP BY expression [, ...] ] [ HAVING condition ] [ WINDOW window_name AS ( window_definition ) [, ...] ] [ { UNION | INTERSECT | EXCEPT } [ ALL | DISTINCT ] select ] [ ORDER BY expression [ ASC | DESC | USING operator ] [ NULLS { FIRST | LAST } ] [, ...] ] [ LIMIT { count | ALL } ] [ OFFSET start [ ROW | ROWS ] ] [ FETCH { FIRST | NEXT } [ count ] { ROW | ROWS } ONLY ] [ FOR { UPDATE | SHARE } [ OF table_name [, ...] ] [ NOWAIT ] [...] ] ``` ## 描述 `选择进入`创建一个新表并用查询计算的数据填充它。数据不会返回给客户端,因为它是正常的`选择`.新表的列的名称和数据类型与`选择`. ## 参数 `暂时的`或者`温度` 如果指定,则将该表创建为临时表。参考[创建表](sql-createtable.html)详情。 `未记录` 如果指定,则将该表创建为未记录的表。参考[创建表](sql-createtable.html)详情。 *`新表`* 要创建的表的名称(可选的模式限定)。 所有其他参数在下面详细描述[选择](sql-select.html). ## 笔记 [`创建表为`](sql-createtableas.html)在功能上类似于`选择进入`.`创建表为`是推荐的语法,因为这种形式的`选择进入`在 ECPG 或 PL/pgSQL 中不可用,因为它们解释`进入`条款不同。此外,`创建表为`提供了由`选择进入`. 相比之下`创建表为`,`选择进入`不允许指定像表的访问方法这样的属性[`使用 *`方法`*`](sql-createtable.html#SQL-CREATETABLE-METHOD)或表的表空间[`表空间 *`表空间名称`*`](sql-createtable.html#SQL-CREATETABLE-TABLESPACE).采用`创建表为`如有必要。因此,为新表选择默认表访问方法。看[默认\_桌子\_使用权\_方法](runtime-config-client.html#GUC-DEFAULT-TABLE-ACCESS-METHOD)了解更多信息。 ## 例子 创建一个新表`电影_最近`仅由表中的最近条目组成`电影`: ``` SELECT * INTO films_recent FROM films WHERE date_prod >= '2002-01-01'; ``` ## 兼容性 SQL 标准使用`选择进入`将选择值表示为主机程序的标量变量,而不是创建新表。这确实是 ECPG 中的用法(参见[第36章](ecpg.html)) 和 PL/pgSQL (参见[第 43 章](plpgsql.html))。PostgreSQL 的使用`选择进入`表示表创建是历史性的。其他一些 SQL 实现也使用`选择进入`以这种方式(但大多数 SQL 实现都支持`创建表为`反而)。除了这样的兼容性考虑,最好使用`创建表为`为此在新代码中。 ## 也可以看看 [创建表为](sql-createtableas.html)