# 选择进入

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 ] [...] ]

# 描述

选择进入创建一个新表并用查询计算的数据填充它。数据不会返回给客户端,因为它是正常的选择.新表的列的名称和数据类型与选择.

# 参数

暂时的或者温度

如果指定,则将该表创建为临时表。参考创建表详情。

未记录

如果指定,则将该表创建为未记录的表。参考创建表详情。

新表

要创建的表的名称(可选的模式限定)。

所有其他参数在下面详细描述选择.

# 笔记

创建表为在功能上类似于选择进入.创建表为是推荐的语法,因为这种形式的选择进入在 ECPG 或 PL/pgSQL 中不可用,因为它们解释进入条款不同。此外,创建表为提供了由选择进入.

相比之下创建表为,选择进入不允许指定像表的访问方法这样的属性使用 *方法*或表的表空间表空间 *表空间名称*.采用创建表为如有必要。因此,为新表选择默认表访问方法。看默认_桌子_使用权_方法了解更多信息。

# 例子

创建一个新表电影_最近仅由表中的最近条目组成电影

SELECT * INTO films_recent FROM films WHERE date_prod >= '2002-01-01';

# 兼容性

SQL 标准使用选择进入将选择值表示为主机程序的标量变量,而不是创建新表。这确实是 ECPG 中的用法(参见第36章) 和 PL/pgSQL (参见第 43 章)。PostgreSQL 的使用选择进入表示表创建是历史性的。其他一些 SQL 实现也使用选择进入以这种方式(但大多数 SQL 实现都支持创建表为反而)。除了这样的兼容性考虑,最好使用创建表为为此在新代码中。

# 也可以看看

创建表为