选择 打开 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

文档 / SQL 命令 / 查询与数据操作

SQL COMMAND · 查询与数据操作

SELECT INTO

根据查询结果定义一个新表

SELECT查询与数据操作引入 10(基线)现存至 20 devel2 次语法变更

动词
SELECT
对象
INTO
引入版本
10(基线)
状态
现存
语法变更次数
2
手册小节数
6

本站手册 · 18官方文档 ↗

版本轨迹

相对 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

语法概要

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

PostgreSQL 18 手册 · 查看完整参考页

描述

SELECT INTO创建一个新表,并用查询计算得到的 数据填充该表。与普通的SELECT不同,这些数据不 会返回给客户端。新表的列具有与SELECT输出列对 应的名称和数据类型。

参数

TEMPORARYTEMP

如果指定,该表将创建为临时表。详见 CREATE TABLE

UNLOGGED

如果指定,该表将创建为不记录 WAL 的表。详见 CREATE TABLE

new_table

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

所有其他参数都在SELECT中有详细说明。

注解

CREATE TABLE AS在功能上与 SELECT INTO类似。CREATE TABLE AS 是推荐使用的语法,因为这种形式的SELECT INTOECPGPL/pgSQL中不可用,因为它们对 INTO子句有不同的解释。此外, CREATE TABLE AS提供的功能是 SELECT INTO所提供功能的超集。

CREATE TABLE AS不同,SELECT INTO不允许使用USING method 指定诸如表访问方法之类的属性,也不允许使用TABLESPACE tablespace_name指定表空间。如有需要,请使用 CREATE TABLE AS。因此,新表会选用默认的表访问方 法。更多信息请参见default_table_access_method

示例

创建一个新表films_recent,它只包含表 films中的最近条目:

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

兼容性

SQL 标准使用SELECT INTO表示将值选入宿主程序 的标量变量,而不是创建一个新表。这确实是 ECPG(见Chapter 34)和 PL/pgSQL(见Chapter 41) 中的用法。PostgreSQL使用SELECT INTO表示创建表则是历史遗留用法。其他一些 SQL 实现也以这种 方式使用SELECT INTO(但大多数 SQL 实现改为支 持CREATE TABLE AS)。撇开这类兼容性考虑,对 于新代码,最好为此目的使用CREATE TABLE AS

另见

语法演化

相邻大版本之间的差异,新的在前。版本号链接到对应快照。

  1. 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 [, ...] ]− [ FETCH { FIRST | NEXT } [ count ] { ROW | ROWS } ONLY ]− [ FOR { UPDATE | SHARE } [ OF table_name [, ...] ] [ NOWAIT ] [...] ]
  2. PostgreSQL 14← 13正文更新

    正文更新
  3. PostgreSQL 12← 11语法变化

    + [ { * | expression [ [ AS ] output_name ] } [, ...] ]− * | expression [ [ AS ] output_name ] [, ...]正文更新
  4. PostgreSQL 11← 10正文更新

    正文更新

同组命令

命令动词对象版本变动最近变更
QUERIES & DATA查询与数据操作10 条
COPYCOPY 193 次
在文件和表之间复制数据现存
DELETEDELETE 193 次
删除表中的行现存
EXPLAINEXPLAIN 194 次
显示一个语句的执行计划现存
INSERTINSERT 193 次
在表中插入新行现存
LOCKLOCK 111 次
锁定表现存
MERGEMERGE
有条件地插入、更新或删除表中的行现存
SELECTSELECT 206 次
从表或视图中检索行现存
UPDATEUPDATE 193 次
更新表中的行现存
VALUESVALUES
计算一组行现存
SELECT INTOSELECTINTO 192 次
根据查询结果定义一个新表现存