PostgreSQL 8.4.1文書
前のページ | 巻戻し |  | 早送り | 次のページ

# SELECT INTO

## 名前

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

## 概要

    [ WITH [ RECURSIVE ] with_query [, ...] ]
    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 [, ...] ]
        [ HAVING condition [, ...] ]
        [ { UNION | INTERSECT | EXCEPT } [ ALL ] 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` or `TEMP`

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

`new_table`

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

その他のパラメータについては、SELECTで詳細に説明されています。

## 注釈

CREATE TABLE ASは機能的には`SELECT INTO`と同じです。 `INTO`句の解釈が異なるため、`SELECT INTO`という形式はECPGやPL/pgSQLでは使用できません。 そのため、`CREATE TABLE AS`構文を使用することをお勧めします。 さらに、`CREATE TABLE AS`は、`SELECT INTO`の機能に加え、さらに多くの機能を提供します。

PostgreSQL 8.1より前は、 `SELECT INTO`で作成されるテーブルはデフォルトでOIDを含んでいました。 PostgreSQL 8.1ではこの問題はありません。 新しいテーブルにOIDを含めたければ、 default_with_oids設定変数を有効にする必要があります。 `WITH OIDS`句を付けて`CREATE TABLE AS`を実行するという別の方法もあります。

## 例

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

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

## 互換性

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

## 関連項目

CREATE TABLE AS

前のページ | ホーム | 次のページ
SELECT | 上に戻る | SET