SELECT INTO

SELECT INTO —从查询结果定义新表

Synopsis

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

Description

SELECT INTO创建一个新表,并用查询计算的数据填充该表。数据不会像常规SELECT一样返回给 Client 端。新表的列具有与SELECT的输出列关联的名称和数据类型。

Parameters

  • TEMPORARYTEMP

    • 如果指定,该表将被创建为临时表。有关详情,请参阅CREATE TABLE
  • UNLOGGED

    • 如果指定,该表将创建为未记录表。有关详情,请参阅CREATE TABLE
  • new_table

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

所有其他参数在SELECT下进行了详细说明。

Notes

创建表为在功能上类似于SELECT INTOCREATE TABLE AS是推荐的语法,因为这种形式的SELECT INTO在 ECPG 或 PL/pgSQL 中不可用,因为它们对INTO子句的解释不同。此外,CREATE TABLE AS提供了SELECT INTO提供的功能的超集。

要将 OID 添加到SELECT INTO创建的表中,请启用default_with_oids配置变量。另外,CREATE TABLE AS可以与WITH OIDS子句一起使用。

Examples

创建一个仅由表films的最新条目组成的新表films_recent

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

Compatibility

SQL 标准使用SELECT INTO表示将值选择到宿主程序的标量变量中,而不是创建新表。这确实是 ECPG(请参阅Chapter 35)和 PL/pgSQL(请参阅Chapter 42)中的用法。 PostgreSQL 使用SELECT INTO表示表创建是历史性的。为此,最好在新代码中使用CREATE TABLE AS

See Also

创建表为