★PostgreSQLカンファレンス2024 12月6日開催/チケット販売中★
他のバージョンの文書 16 | 15 | 14 | 13 | 12 | 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

Name

SELECT INTO  --  問い合わせの結果からの新しいテーブルの作成

Synopsis

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

入力

TEMPORARY
TEMP

TEMPORARY もしくは TEMP を指定すると、出力テーブルはこのセッション間だけのものとして作成され、セッションを出るときに自動的に削除されます。同じ名前を持つ既存の永続テーブルはその一時テーブルが存在する間(このセッション)は見えません。一時テーブルで作られるどのインデックスも自動的に一時のものになります。

new_table

作成される新しいテーブルの名前です。このテーブルは既に存在していてはいけません。しかし、既存の永続テーブルと同じ名前を持つ一時テーブルを作成することはできます。

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

出力

可能な出力メッセージの要約は CREATE TABLESELECT を見て下さい。

説明

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

Note: CREATE TABLE AS は機能的には SELECT INTO と同じです。 SELECT INTO は標準ではないので、構文は CREATE TABLE AS をお勧めします。実際、この SELECT INTO という形式は PL/pgSQL ecpg では有効ではありません。なぜならそれらは INTO 句を異なって解釈するからです。

互換性

SQL92 は、選択する値をホストプログラムのスカラー変数で選択する値を表示するために、新しいテーブルを作成するのではなく、 SELECT ... INTO を使います。これは PL/pgSQL ecpg で見つけられる使用法です。テーブル作成を表す SELECT INTOPostgreSQL 使用は歴史的なものです。新しいコードではこの目的には CREATE TABLE AS を使うのが最善です。(CREATE TABLE AS も標準ではありませんが、これのほうが混乱を招く可能性が少ないです。)