SELECT INTO
SELECT INTO¶
根据查询结果定义一个新表。
- 语法
sql [ 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
相同。TEMPORARY
|TEMP
- 如果指定,该表将创建为临时表。
UNLOGGED
- 如果指定,该表将创建为不计入日志表。 写入不计入日志表的数据不会写入预写(WAL)日志,这使它们比普通表快得多。但是,不计入日志表的内容不会复制到mirror实例。同样,不计入日志表也不是崩溃安全的。 executor实例崩溃或异常关闭后,该executor上不计入日志表的数据将被截断。在不计入日志表上创建的所有索引也会自动取消计入日志。
new_table
- 要创建的表的名称(可以用schema修饰)。
- 示例
-
创建一个新表
films_recent
,该表仅包含表films
中的最新条目:SELECT * INTO films_recent FROM films WHERE date_prod >= '2016-01-01';
- 兼容性说明
- SQL标准使用
SELECT INTO
表示将值选择到主机程序的标量变量中,而不是创建新表。SELECT INTO
在SeaboxMPP数据库中用于表示表创建的用法是历史性的。 为此,最好在新应用程序中使用CREATE TABLE AS
。 - 相关SQL命令
SELECT
,CREATE TABLE AS