このトピックでは、SELECT INTOステートメントについて説明します。
背景情報
SELECT INTOはテーブルを作成し、クエリで取得したデータをテーブルに入力します。 クエリで取得したデータは、標準のSELECTステートメントのようにクライアントに返されません。 新しいテーブルの列は、SELECT結果の列の名前とデータ型を使用します。
構文
[ WITH [ RECURSIVE ] with_query [, ...] ]]
SELECT [ ALL | DISTINCT [ ON (式 [, ...] ) ] ]
* | 式 [ [ AS ] output_name ] [, ...]
INTO [ TEMPORARY | TEMP | UNLOGGED ] [ TABLE ] new_table
[FROM from_item [, ...] ]
[ WHERE condition ]
[GROUP BY式 [, ...] ]
[HAVINGコンディション]
[WINDOW window_name AS ( window_definition ) [, ...] ]
[ { UNION | INTERSECT | EXCEPT } [ ALL | DISTINCT ] select ]
[ORDER BY expression [ ASC | DESC | USING演算子] [ NULLS { FIRST | LAST } ] [, ...] ]
[LIMIT { count | ALL } ]
[オフセットスタート [ROW | ROWS ] ]
[FETCH { FIRST | NEXT } [ count ] { ROW | ROWS} のみ]
[FOR { UPDATE | SHARE } [ OF table_name [, ...] ] ] [ NOWAIT ] [...] ] Parameters
TEMPORARYまたはTEMPパラメーターを指定すると、一時テーブルが作成されます。 詳細については、「CREATE TABLE」をご参照ください。UNLOGGEDパラメーターを指定すると、LOGGEDテーブルが作成されます。new_tableパラメーターは、新しいテーブルの名前を指定します (名前はスキーマ修飾できます) 。説明その他のパラメーターの詳細については、「SELECT」をご参照ください。
使用上の注意
CREATE TABLE ASは、SELECT INTOと機能が似ています。 SELECT INTOは、INTO句の解釈が異なるecpgまたはPL/pgSQLでは使用できないため、CREATE TABLE ASを使用することを推奨します。 さらに、CREATE TABLE ASは、SELECT INTOのスーパーセットである機能を提供します。
CREATE TABLE ASとは異なり、SELECT INTOでは、USINGメソッドのテーブルアクセスメソッドやTABLESPACE tablespace_nameのテーブルスペースなどの属性を指定できません (必要に応じてCREATE table asを使用します) 。 したがって、新しいテーブルにはデフォルトのテーブルアクセス方法が選択されます。
例
filmsテーブルの最近のデータのみを含むfilms_recentテーブルを作成します。
SELECT * INTO films_recent FROM films WHERE date_prod >= '2002-01-01 ';