[11/15開催: PostgreSQL Conference Japan 2019 参加受付中] 
他のバージョンの文書 11 | 10 | 9.6 | 9.5 | 9.4 | 9.3 | 9.2 | 9.1 | 9.0 | 8.4 | 8.3 | 8.2 | 8.1 | 8.0 | 7.4 | 7.3 | 7.2

SELECT INTO

名前

SELECT INTO -- 問い合わせの結果からの新しいテーブルを定義

概要

SELECT [ ALL | DISTINCT [ ON ( expression [, ...] ) ] ]
    * | expression [ AS output_name ] [, ...]
    INTO [ TEMPORARY | TEMP ] [ TABLE ] new_table
    [ FROM from_item [, ...] ]
    [ WHERE condition ]
    [ GROUP BY expression [, ...] ]
    [ HAVING condition [, ...] ]
    [ { UNION | INTERSECT | EXCEPT } [ ALL ] select ]
    [ ORDER BY expression [ ASC | DESC | USING operator ] [, ...] ]
    [ LIMIT { count | ALL } ]
    [ OFFSET start ]
    [ FOR UPDATE [ OF tablename [, ...] ] ]

説明

SELECT INTOは新しいテーブルを作成し、問い合わせによって計算されるデータを格納します。 そのデータは通常のSELECTのようにクライアントには返されません。 新しいテーブルの列はSELECTの出力列と関連するデータ型と名前を持ちます。

パラメータ

TEMPORARY or TEMP

指定された場合、テーブルは一時テーブルとして作成されます。 詳細はCREATE TABLEを参照してください。

new_table

作成するテーブルの名前です (スキーマ修飾名でも可)。

その他の全ての入力はSELECTで詳細が説明されています。

注釈

CREATE TABLE ASは機能的にはSELECT INTOと同じです。 INTO句は異なる解釈がなされるため、SELECT INTOという形式はECPGPL/pgSQLでは使用できません。 そのため、構文としてはCREATE TABLE ASをお勧めします。 更に、CREATE TABLE ASSELECT INTOが提供する機能より上位機能を提供します。

PostgreSQL 8.0より前までは、 SELECT INTOで作成されるテーブルは常にOIDを含んでいました。 PostgreSQL 8.0では、SELECT INTOによって作成されるテーブルへにOIDを含めるかどうかはdefault_with_oids設定変数で制御されます。 現在、この変数のデフォルトは真ですが、将来のリリースのPostgreSQLでは偽になるかもしれません。

filmsテーブルの最近の項目のみからなる、新しいfilms_recentテーブルを作成します。

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

互換性

標準SQLでは、SELECT INTOは新しいテーブルを作成するのではなく、 選択する値をホストプログラムのスカラ変数で選択する値を表示するために使用されます。 これは実際、ECPG(第29章参照)やPL/pgSQL (第35章参照)で見られる使用方法です。 PostgreSQLにおける、テーブル作成を表すSELECT INTOの使用方法は歴史的なものです。 新しいコードではこの目的にはCREATE TABLE ASを使うのが最善です。

関連項目

CREATE TABLE AS