SELECT INTO
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 ] [...] ]
說明
SELECT INTO 會建立一個新的資料表並使用查詢産生的資料填入。資料不會回傳到用戶端,即使它具有普通的 SELECT。新資料表的欄位具有與 SELECT 的輸出欄位相關聯的名稱和資料型別。
參數
TEMPORARY
或 TEMP
如果指定的話,則資料表被建立為臨時資料表。有關詳細訊息,請參閱 CREATE TABLE。
UNLOGGED
如果指定的話,則將此表建立為無日誌記錄的資料表。有關詳細訊息,請參閱 CREATE TABLE。
new_table
要建立的資料表名稱(可加上綱要名稱)。
所有其他參數在 SELECT 下詳細描述。
注意
CREATE TABLE AS 在功能上類似於 SELECT INTO。CREATE TABLE AS 是推薦的語法,因為這種 SELECT INTO 形式在 ECPG 或 PL/pgSQL 中不可用,它們會以不同的方式解釋 INTO 子句。此外,CREATE TABLE AS 提供了 SELECT INTO 提供的功能的更多功能。
要將 OID 加到 SELECT INTO 所建立的資料表中,請啟用 default_with_oids 組態變數。或者,以 CREATE TABLE AS 與 WITH OIDS 子句一起使用。
範例
建立一個新的資料表 films_recent,其中只包含來自資料表 film 的最新項目:
SELECT * INTO films_recent FROM films WHERE date_prod >= '2002-01-01';
相容性
SQL 標準使用 SELECT INTO 將查詢結果表示為主機程序的 scalar 變量,而不是建立新資料表。這確實是 ECPG(參閱第 35 章)和 PL/pgSQL(參見第 42 章)中的用法。SELECT INTO 用於結果資料表建立的 PostgreSQL 用法是歷史性的。在新的程式中最好使用 CREATE TABLE AS 來達到此目的。