SQL COMMAND · 查询与数据操作
SELECT INTO
根据查询结果定义一个新表
define a new table from the results of a query
SELECT查询与数据操作引入 6.4(基线)现存至 20 devel13 次语法变更
- 动词
SELECT- 对象
INTO- 分组
- 查询与数据操作
- 引入版本
- 6.4(基线)
- 状态
- 现存
- 语法变更次数
- 13
- 手册小节数
- 6
版本轨迹
相对 PostgreSQL 17 无变化。
语法铁道图 PostgreSQL 18
沿轨道从左向右阅读,分岔表示选择,绕行表示可选,回环表示重复。方框为参数,点击带下划线的参数可展开子规则。
语法概要
[ 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 ] [...] ]
描述
SELECT INTO 创建一个新表,并用查询计算得到的数据填充该表。与普通的 SELECT 不同,这些数据不会返回给客户端。新表的列具有与 SELECT 输出列对应的名称和数据类型。
参数
TEMPORARY或TEMP如果指定,将把该表创建为临时表。详见 CREATE TABLE。
UNLOGGED如果指定,该表将创建为不记录 WAL 的表。详见 CREATE TABLE。
new_table要创建的表名(可选地带模式限定)。
所有其他参数都在 SELECT 中有详细说明。
注解
CREATE TABLE AS 在功能上与
SELECT INTO 类似。CREATE TABLE AS
是推荐使用的语法,因为这种形式的 SELECT
INTO 在 ECPG
或 PL/pgSQL 中不可用,因为它们对
INTO 子句有不同的解释。此外,CREATE TABLE AS 提供的功能是
SELECT INTO 所提供功能的超集。
与 CREATE TABLE AS 不同,SELECT
INTO 不允许使用 USING 指定诸如表访问方法之类的属性,也不允许使用 methodTABLESPACE 指定表空间。如有需要,请使用
tablespace_nameCREATE TABLE AS。因此,新表会选用默认的表访问方法。更多信息请参见 default_table_access_method。
示例
创建一个新表 films_recent,它只包含表
films 中的最近条目:
SELECT * INTO films_recent FROM films WHERE date_prod >= '2002-01-01';
兼容性
另见
语法演化
相邻大版本之间的差异,新的在前。版本号链接到对应快照。
PostgreSQL 19← 18语法变化
+ [ GROUP BY [ ALL | DISTINCT ] grouping_element [, ...] ]+ [ FETCH { FIRST | NEXT } [ count ] { ROW | ROWS } { ONLY | WITH TIES } ]+ [ FOR { UPDATE | NO KEY UPDATE | SHARE | KEY SHARE } [ OF from_reference [, ...] ] [ NOWAIT | SKIP LOCKED ] [...] ]− [ GROUP BY expression [, ...] ]− [ FOR { UPDATE | SHARE } [ OF table_name [, ...] ] [ NOWAIT ] [...] ]PostgreSQL 17← 16正文更新
正文更新PostgreSQL 14← 13正文更新
正文更新PostgreSQL 12← 11语法变化
+ [ { * | expression [ [ AS ] output_name ] } [, ...] ]正文更新PostgreSQL 11← 10正文更新
正文更新PostgreSQL 10← 9.6正文更新
正文更新PostgreSQL 9.6← 9.5正文更新
正文更新PostgreSQL 9.5← 9.4语法变化
− [ HAVING condition [, ...] ]PostgreSQL 9.4← 9.3正文更新
正文更新PostgreSQL 9.3← 9.2正文更新
正文更新PostgreSQL 9.1← 9.0语法变化
+ INTO [ TEMPORARY | TEMP | UNLOGGED ] [ TABLE ] new_table+ [ { UNION | INTERSECT | EXCEPT } [ ALL | DISTINCT ] select ]正文更新PostgreSQL 9.0← 8.4正文更新
正文更新PostgreSQL 8.4← 8.3语法变化
+ [ WITH [ RECURSIVE ] with_query [, ...] ]+ * | expression [ [ AS ] output_name ] [, ...]+ [ HAVING condition [, ...] ]+ [ WINDOW window_name AS ( window_definition ) [, ...] ]+ [ OFFSET start [ ROW | ROWS ] ]+ [ FETCH { FIRST | NEXT } [ count ] { ROW | ROWS } ONLY ]PostgreSQL 8.3← 8.2语法变化
+ [ ORDER BY expression [ ASC | DESC | USING operator ] [ NULLS { FIRST | LAST } ] [, ...] ]正文更新PostgreSQL 8.2← 8.1语法变化
+ [ FOR { UPDATE | SHARE } [ OF table_name [, ...] ] [ NOWAIT ] [...] ]正文更新PostgreSQL 8.1← 8.0语法变化
+ [ FOR { UPDATE | SHARE } [ OF table_name [, ...] ] [ NOWAIT ] ]− [ FOR UPDATE [ OF tablename [, ...] ] ]正文更新PostgreSQL 8.0← 7.4正文更新
正文更新PostgreSQL 7.4← 7.3正文更新
正文更新PostgreSQL 7.3← 7.2语法变化
+ [ LIMIT { count | ALL } ]+ [ OFFSET start ]+ [ FOR UPDATE [ OF tablename [, ...] ] ]− [ LIMIT [ start , ] { count | ALL } ]− [ OFFSET start ]− where from_item can be:− [ ONLY ] table_name [ * ]− [ [ AS ] alias [ ( column_alias_list ) ] ]− |− ( select )− [ AS ] alias [ ( column_alias_list ) ]− |− from_item [ NATURAL ] join_type from_item− [ ON join_condition | USING ( join_column_list ) ]正文更新PostgreSQL 7.2← 7.1语法变化
+ [ { UNION | INTERSECT | EXCEPT } [ ALL ] select ]+ [ LIMIT [ start , ] { count | ALL } ]− [ { UNION | INTERSECT | EXCEPT [ ALL ] } select ]− [ LIMIT { count | ALL } [ { OFFSET | , } start ]]正文更新PostgreSQL 7.1← 7.0语法变化
sql-selectinto.htm → sql-selectinto.html
+ * | expression [ AS output_name ] [, ...]+ [ FROM from_item [, ...] ]+ [ GROUP BY expression [, ...] ]+ [ { UNION | INTERSECT | EXCEPT [ ALL ] } select ]+ [ ORDER BY expression [ ASC | DESC | USING operator ] [, ...] ]+ [ FOR UPDATE [ OF tablename [, ...] ] ]+ [ LIMIT { count | ALL } [ { OFFSET | , } start ]]+ where from_item can be:+ [ ONLY ] table_name [ * ]+ [ [ AS ] alias [ ( column_alias_list ) ] ]+ |+ ( select )+ [ AS ] alias [ ( column_alias_list ) ]+ |+ from_item [ NATURAL ] join_type from_item+ [ ON join_condition | USING ( join_column_list ) ]− expression [ AS name ] [, ...]− [ INTO [ TEMPORARY | TEMP ] [ TABLE ] new_table ]− [ FROM table [ alias ] [, ...] ]− [ GROUP BY column [, ...] ]− [ { UNION [ ALL ] | INTERSECT | EXCEPT } select ]− [ ORDER BY column [ ASC | DESC | USING operator ] [, ...] ]− [ FOR UPDATE [ OF class_name [, ...] ] ]正文更新PostgreSQL 7.0← 6.5语法变化
+ SELECT [ ALL | DISTINCT [ ON ( expression [, ...] ) ] ]+ [ INTO [ TEMPORARY | TEMP ] [ TABLE ] new_table ]+ [ ORDER BY column [ ASC | DESC | USING operator ] [, ...] ]+ [ FOR UPDATE [ OF class_name [, ...] ] ]+ LIMIT { count | ALL } [ { OFFSET | , } start ]− [ LIMIT count [OFFSET|, count]]PostgreSQL 6.5← 6.4语法变化
+ INTO [TEMP] [ TABLE ] new_table ]+ [ { UNION [ALL] | INTERSECT | EXCEPT } select]+ [ FOR UPDATE [OF class_name...]]+ [ LIMIT count [OFFSET|, count]]
同组命令
| 命令 | 动词 | 对象 | 版本变动 | 最近变更 |
|---|---|---|---|---|
COPY | COPY | — | 1917 次 | |
| 在文件和表之间复制数据 | 现存 | |||
DELETE | DELETE | — | 1811 次 | |
| 删除表中的行 | 现存 | |||
EXPLAIN | EXPLAIN | — | 1910 次 | |
| 显示一个语句的执行计划 | 现存 | |||
INSERT | INSERT | — | 1912 次 | |
| 在表中插入新行 | 现存 | |||
LOCK | LOCK | — | 9.07 次 | |
| 锁定表 | 现存 | |||
MERGE | MERGE | — | 182 次 | |
| 有条件地插入、更新或删除表中的行 | 现存 | |||
SELECT | SELECT | — | 1722 次 | |
| 从表或视图中检索行 | 现存 | |||
UPDATE | UPDATE | — | 1813 次 | |
| 更新表中的行 | 现存 | |||
VALUES | VALUES | — | 8.41 次 | |
| 计算一组行 | 现存 | |||
SELECT INTO | SELECT | INTO | 1913 次 | |
| 根据查询结果定义一个新表 | 现存 | |||