sql-selectinto.zh.md 2.8 KB
Newer Older
李少辉-开发者's avatar
李少辉-开发者 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
## 选择进入

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

## 描述

`选择进入`创建一个新表并用查询计算的数据填充它。数据不会返回给客户端,因为它是正常的`选择`.新表的列的名称和数据类型与`选择`.

## 参数

`暂时的`或者`温度`

如果指定,则将该表创建为临时表。参考[创建表](sql-createtable.html)详情。

`未记录`

如果指定,则将该表创建为未记录的表。参考[创建表](sql-createtable.html)详情。

*`新表`*

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

所有其他参数在下面详细描述[选择](sql-select.html).

## 笔记

[`创建表为`](sql-createtableas.html)在功能上类似于`选择进入`.`创建表为`是推荐的语法,因为这种形式的`选择进入`在 ECPG 或 PL/pgSQL 中不可用,因为它们解释`进入`条款不同。此外,`创建表为`提供了由`选择进入`.

相比之下`创建表为`,`选择进入`不允许指定像表的访问方法这样的属性[`使用 *`方法`*`](sql-createtable.html#SQL-CREATETABLE-METHOD)或表的表空间[`表空间 *`表空间名称`*`](sql-createtable.html#SQL-CREATETABLE-TABLESPACE).采用`创建表为`如有必要。因此,为新表选择默认表访问方法。看[默认\_桌子\_使用权\_方法](runtime-config-client.html#GUC-DEFAULT-TABLE-ACCESS-METHOD)了解更多信息。

## 例子

创建一个新表`电影_最近`仅由表中的最近条目组成`电影`

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

## 兼容性

SQL 标准使用`选择进入`将选择值表示为主机程序的标量变量,而不是创建新表。这确实是 ECPG 中的用法(参见[第36章](ecpg.html)) 和 PL/pgSQL (参见[第 43 章](plpgsql.html))。PostgreSQL 的使用`选择进入`表示表创建是历史性的。其他一些 SQL 实现也使用`选择进入`以这种方式(但大多数 SQL 实现都支持`创建表为`反而)。除了这样的兼容性考虑,最好使用`创建表为`为此在新代码中。

## 也可以看看

[创建表为](sql-createtableas.html)