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 ] [, ...] ]
    [ LIMIT { count | ALL } ]
    [ OFFSET start ]
    [ FOR UPDATE [ OF tablename [, ...] ] ]

描述

SELECT INTO 從一個查詢的計算結果中建立一個新資料表。 資料並不返回給客戶端,這一點和普通的 SELECT 不同。 新資料表的字串具有和 SELECT 的輸出字串相關聯(相同)的名字和資料類型。

參數

TEMPORARYTEMP

如果聲明了這個關鍵字,那麼該資料表是作為一個臨時資料表建立的。 請參考 CREATE TABLE 獲取細節。

new_table

要建立的資料表的資料表名(可以有模式修飾)。

所有其它輸入的域都在 SELECT 中有詳細描述。

注意

CREATE TABLE AS 的作用和 SELECT INTO 類似。 我們建議使用 CREATE TABLE AS 語法, 因為 SELECT INTO 不是標準語法。 實際上,這種類型的 SELECT INTO 是不能在 ECPG 或者 PL/pgSQL 中使用的, 因為它們對 INTO 子句的解釋是不同的。 而且,CREATE TABLE AS 提供了一個 SELECT INTO 所提供功能的超集。

PostgreSQL 8.0 以前,SELECT INTO 建立的資料表總是包含 OID。 到了 PostgreSQL 8.0, SELECT INTO 建立的資料表是否包含 OID 由 default_with_oids 配置參數控制。這個參數目前預設為真,但是在將來的 PostgreSQL 版本裡,很有可能改成預設為假。

例子

建立一個新資料表 films_recent, 它值包含來自 films 的最近的條目:

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

相容性

SQL 標準用 SELECT INTO 資料表示選取數值到一個宿主程序的標量變量中, 而不是建立一個新資料表。SQL92 的用法實際上就是在 ECPG (參閱 Chapter 29)和PL/pgSQLChapter 35)裡的用途。 PostgreSQLSELECT INTO 代資料表建立資料表的意思是歷史原因。 在新代碼裡我們最好使用 CREATE TABLE AS 實現這個目的。

又見

CREATE TABLE AS