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 [, ...]]
[{ 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]
[...]]
描述
SELECT INTO
创建一个新表,并用查询计算的数据填充该表。
数据不会像常规SELECT
一样返回给客户端。
新表的列具有与SELECT
的输出列关联的名称和数据类型。
参数
SELECT INTO
的大多数参数与[SELECT](SELECT.html#topic1)
相同。
TEMPORARY TEMP 如果指定,该表将创建为临时表。 UNLOGGED 如果指定,该表将创建为不计入日志表。 写入不计入日志表的数据不会写入预写(WAL)日志,这使它们比普通表快得多。 但是,不计入日志表的内容不会复制到mirror实例。 同样,不计入日志表也不是崩溃安全的。 segment实例崩溃或异常关闭后,该segment上不计入日志表的数据将被截断。 在不计入日志表上创建的所有索引也会自动取消计入日志。
new_table 要创建的表的名称(可以用schema修饰)。
示例
创建一个新表films_recent
,该表仅包含表films
中的最新条目:
SELECT * INTO films_recent FROM films WHERE date_prod >= '2016-01-01';
兼容性
SQL标准使用SELECT INTO
表示将值选择到主机程序的标量变量中,而不是创建新表。
SELECT INTO
在Greenplum数据库中用于表示表创建的用法是历史性的。
为此,最好在新应用程序中使用[CREATE TABLE AS](CREATE_TABLE_AS.html#topic1)
。
另见
[SELECT](SELECT.html#topic1)
,
[CREATE TABLE AS](CREATE_TABLE_AS.html#topic1)
Parent topic: SQL Command Reference